从EventStore检索日历事件返回nil

时间:2018-06-05 14:45:05

标签: ios objective-c cordova calendar

过去两天我对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;
}

它返回正确的事件标识符,不存在错误,并且在日历中可以看到事件。

1 个答案:

答案 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}},我希望它可以帮助你:)