过去两天我对Objective C感到沮丧。 我们正在制作一个简单的应用程序来读取,编写和更新iOS日历(iOS 9及更高版本)的事件。我们选择Objective C作为编程语言。
目前我们可以使用Event Store.阅读日历并添加新的日历活动,但我们在使用下一个代码检索日历活动时遇到了一个大问题:
EKEvent* event = [eventStore eventWithIdentifier: eventId];
它始终返回nil
,我们无法从日历中删除该事件。
这是我们目前用于添加新事件的代码:
if([eventStore saveEvent:myEvent span:EKSpanThisEvent error:&error]) {
if (error) {
return nil;
} else {
NSString* id = myEvent.eventIdentifier;
return id;
}
} else {
return nil;
}
它返回正确的事件标识符,不存在错误,并且在日历中可以看到事件。
答案 0 :(得分:0)
首先,你需要征得这样的许可:
- (void)askForPermissionUpdateEventStore
{
/* This two variables you need to declare like a properties */
__block BOOL isAuthorized = NO;
EKEventStore *eventStore;
/* From this is the code required to ask for permission */
EKAuthorizationStatus authorizationStatus = [EKEventStore authorizationStatusForEntityType: EKEntityTypeEvent];
switch (authorizationStatus) {
case EKAuthorizationStatusDenied:
case EKAuthorizationStatusRestricted: {
isAuthorized = NO;
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Access Denied"
message:@"This app doesn't have access to your events." delegate:nil
cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[alertView show];
break;
}
case EKAuthorizationStatusAuthorized:
isAuthorized = YES;
break;
case EKAuthorizationStatusNotDetermined: {
[eventStore requestAccessToEntityType:EKEntityTypeEvent
completion:^(BOOL granted, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
isAuthorized = granted;
});
}];
break;
}
}
}
因此,在此之后您可以从iOS日历中编写和读取事件,过程与提醒相同,只有事物更改是对象的类型 EKEntityTypeReminder ,或者如果您愿意,可以查看此{{ 3}},我希望它可以帮助你:)