我正在尝试从我的应用程序中保存/检索提醒,但出于某种原因,EKReminder 似乎没有被保存。这是我的代码:
EKEventStore * _eventStore = [[EKEventStore alloc] init];
[_eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError *error) {
//create a new calendar for reminders.
EKCalendar *calendar = [EKCalendar calendarForEntityType:EKEntityTypeReminder eventStore:_eventStore];
EKSource *localSource = nil;
for (EKSource *source in _eventStore.sources)
if (source.sourceType == EKSourceTypeLocal)
{
localSource = source;
break;
}
calendar.source = localSource;
self.calendarIdentifier = calendar.calendarIdentifier;
EKReminder *reminder = [EKReminder reminderWithEventStore:_eventStore];
reminder.calendar = calendar;
reminder.title = @"Test Reminder";
reminder.startDateComponents = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:[NSDate date]];
reminder.completionDate = [NSDate dateWithTimeIntervalSinceNow:100];
EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:[NSDate dateWithTimeIntervalSinceNow:100]];
reminder.alarms = @[alarm];
NSError *errorOb = nil;
BOOL saved = [_eventStore saveReminder:reminder commit:YES error:&errorOb];
if (saved) NSLog(@"Saved Reminder");
else NSLog(@"Failed to save reminder");
}];
稍后,我会尝试验证提醒是否确实已保存。我使用这段代码来做到这一点:
NSPredicate *predicate = [_eventStore predicateForRemindersInCalendars:nil];
[_eventStore fetchRemindersMatchingPredicate:predicate completion:^(NSArray *reminders) {
for (EKReminder *reminder in reminders) {
NSLog(@"Reminder Title: %@", reminder.title);
}
}];
我的新提醒永远不会出现!
谁能告诉我我做错了什么??
最佳答案
如果授权状态为 EKAuthorizationStatusNotDetermined
,您只需调用 -requestAccessToEntityType:completion:
。您可以使用 +[EKEventStore authorizationStatusForEntityType:]
检查授权状态。
完成 block 只会在您第一次调用 -requestAccessToEntityType:completion
时被调用。在模拟器上它甚至不会被调用一次,因为在模拟器上您的应用程序已经可以访问了。
EKEventStore * _eventStore = [[EKEventStore alloc] init];
EKAuthorizationStatus authorizationStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeReminder];
if (authorizationStatus == EKAuthorizationStatusNotDetermined) {
[_eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError *error) {
if (granted) {
[self createNewReminder];
} else {
[self showNowAccessAlert];
}
}];
} else {
if (authorizationStatus == EKAuthorizationStatusAuthorized) {
[self createNewReminder];
} else {
[self showNowAccessAlert];
}
}
关于ios - 无法在 iOS 6 中保存 EKReminder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15237014/