【问题标题】:Error getting default calendar for new events: Error Domain=EKCADErrorDomain Code=1013 "(null)"获取新事件的默认日历时出错:Error Domain=EKCADErrorDomain Code=1013 "(null)"
【发布时间】:2017-05-02 07:43:50
【问题描述】:

我正在尝试从我的应用程序中将事件保存在 iPhone 日历上,我正在使用此代码:

- (void)addReminderWithTitle:(NSString *)title date:(NSString *)date {
    NSString *dateString = date;
    NSDateFormatter *dateFormatter  = [NSDateFormatter new];
    [dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
    NSDate *dateFromString = [dateFormatter dateFromString:dateString];
    [dateFromString dateByAddingTimeInterval:-60*30];

      EKEventStore *eventStore = [[EKEventStore alloc] init];
    [eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError * _Nullable error) {
        if (granted) {
            EKEvent *event = [EKEvent eventWithEventStore:eventStore];
            event.title = @"Event Title";
            event.startDate = [NSDate date]; //today
            event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
            event.calendar = [eventStore defaultCalendarForNewEvents];
            NSError *err = nil;
            [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&err];

它没有保存任何错误,我得到了这个: 获取新事件的默认日历时出错:Error Domain=EKCADErrorDomain Code=1013 "(null)"

有什么帮助吗?

【问题讨论】:

标签: objective-c events calendar


【解决方案1】:

我使用你的代码我在 info.plist NSCalendarsUsageDescription NSRemindersUsageDescription 添加了两个属性
然后我 NSLog(@"eventStore=:%@", eventStore);结果是eventStore=:<EKEventStore: 0x17418ce60>

我的代码:

- (void)viewDidLoad {
 [super viewDidLoad];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSDate *dateFromString = [dateFormatter dateFromString:dateString];
[dateFromString dateByAddingTimeInterval:-60*30];

EKEventStore *eventStore = [[EKEventStore alloc] init];
[eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError * _Nullable error) {
    if (granted) {
        EKEvent *event = [EKEvent eventWithEventStore:eventStore];
        event.title = @"Event Title";
        event.startDate = [NSDate date]; //today
        event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
        event.calendar = [eventStore defaultCalendarForNewEvents];
        NSError *err = nil;
        [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&err];

    }}];

  NSLog(@"eventStore=:%@", eventStore);
}

【讨论】:

  • @Ali.Jab 在什么情况下会出现警报?
  • 我需要在开始日期前 30 分钟给用户一个提醒(提醒)
  • 我认为您可以获取用户的所有提醒,然后通过 localNotification 添加警报
【解决方案2】:

这里是你想要做的事情的快速代码。您正在请求访问以处理提醒而不是事件,这就是您收到此错误的原因。

let store = EKEventStore()

// Request access to calendar first
store.requestAccess(to: .event, completion: { (granted, error) in
    if granted {
            print("calendar allowed")

            // create the event object
            let event = EKEvent(eventStore: store)
            event.title = self.activityPara.actName
            event.startDate = self.activityPara.actDate
            event.endDate = self.activityPara.actDate.addingTimeInterval(3600) // 1 hr time
            event.location = self.activityPara.actLocatnStr
            event.calendar = store.defaultCalendarForNewEvents

            let controller = EKEventEditViewController()
            controller.event = event
            controller.eventStore = store
            controller.editViewDelegate = self
            self.present(controller, animated: true)
        }
        else
        {
            print("calendar not allowed")
        }           
    })

还要确保在 info.plist 中包含隐私 - 日历使用说明。

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    相关资源
    最近更新 更多