【问题标题】:Retrieving Calendar Event from EventStore returns nil从 EventStore 检索日历事件返回 nil
【发布时间】:2018-11-15 02:35:20
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c cordova calendar


    【解决方案1】:

    首先你需要像这样请求许可:

    - (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 或者如果您愿意,可以查看@987654321 @,希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多