[EventKit] Error getting default calendar for new reminders: Error Domain=EKCADErrorDomain Code=1013

创建Reminder并添加到EKEventStore中


- (void)addReminderNotify:(NSDate *)date title:(NSString *)title startDate:(NSDate *)startDate endDate:(NSDate *)endDate {
    //申请提醒权限
    __weak typeof(self) weakSelf = self;
    [self.eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError * _Nullable error) {
        if (granted) {
            //创建一个提醒功能
            EKReminder *reminder = [EKReminder reminderWithEventStore:weakSelf.eventStore];
            //标题
            reminder.title = title;
            //添加日历
            [reminder setCalendar:[weakSelf.eventStore defaultCalendarForNewReminders]];

            NSCalendar *cal = [NSCalendar currentCalendar];
            [cal setTimeZone:[NSTimeZone systemTimeZone]];
            NSInteger flags = NSCalendarUnitYear | NSCalendarUnitMonth |
            NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute |
            NSCalendarUnitSecond;

            NSDateComponents *start = [cal components:flags fromDate:date];
            start.timeZone = [NSTimeZone systemTimeZone];

            NSDateComponents *end = [cal components:flags fromDate:date];
            end.timeZone = [NSTimeZone systemTimeZone];

            reminder.startDateComponents = start; //开始时间
            reminder.dueDateComponents = end; //到期时间
            reminder.priority = 1; //优先级

            EKRecurrenceDayOfWeek *dayOfWeek1 = [EKRecurrenceDayOfWeek dayOfWeek:EKWeekdayMonday];
            EKRecurrenceDayOfWeek *dayOfWeek2 = [EKRecurrenceDayOfWeek dayOfWeek:EKWeekdayWednesday];
            EKRecurrenceDayOfWeek *dayOfWeek3 = [EKRecurrenceDayOfWeek dayOfWeek:EKWeekdayFriday];
            EKRecurrenceRule *rule = [[EKRecurrenceRule alloc] initRecurrenceWithFrequency:EKRecurrenceFrequencyWeekly interval:3 daysOfTheWeek:@[dayOfWeek1, dayOfWeek2, dayOfWeek3] daysOfTheMonth:nil monthsOfTheYear:nil weeksOfTheYear:nil daysOfTheYear:nil setPositions:nil end:nil];
            reminder.recurrenceRules = @[rule];
//            reminder.recurrenceRules = @[];

            EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:date]; //添加一个车闹钟
            [reminder addAlarm:alarm];
            NSError *err;
            [weakSelf.eventStore saveReminder:reminder commit:YES error:&err];
            if (err == nil) {
                [UtilsManager saveRemindersIdentifyString:reminder.calendarItemIdentifier];
            }

            NSLog(@"myReminder.calendarItemIdentifier  =====  %@", reminder.calendarItemIdentifier);
        }
    }];
}

但是在获取提醒事项中的数据的时候,一直报错

[EventKit] Error getting default calendar for new reminders: Error Domain=EKCADErrorDomain Code=1013 “(null)”


或者

[EventKit] All retries exhausted for CADDatabaseFetchCalendarItemsWithPredic

的错误,就是连接数据源失败,可以往里面添加数据,但是无法从中读取,问题很简单,就是权限不够,需要同时开通日历权限和提醒事项的访问权限:


self.eventStore = [[EKEventStore alloc] init];
    // 读取提醒事项中的数据的时候,需要同时开通日历和提醒事项的权限,不然无法获取提醒事项中的数据
    [self.eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError * _Nullable error) {

    }];
    [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) {

    }];

然后再访问,果然数据就出来了。

猜你喜欢

转载自blog.csdn.net/renjie_Yan/article/details/82667056