1

我在下面编写了这段代码只是为了让它编译,但这不起作用,因为我需要一个 10.8 的部署目标。

发生的事情是我需要访问 EKEventStore ,所以当有人下载​​这个应用程序时,它在 10.8 中运行良好,但有人在 10.9 中下载会出错,因为该应用程序没有日历的隐私权限。由于它是为 10.8 编译的,因此它无法访问方法 requestAccessToEntityType:EKEntityTypeEvent..

怎么做呢?

在相关说明中,您如何编译 10.9 的代码和 10.8 的其他代码,并根据其所处的环境调用这些不同的部分?记住这是针对 Mac App Store 的,如果这是要走的路,请说明一下,就好像您正在与不知道如何开始执行此操作的人交谈,因为我不......谢谢。

    //------------------check authorization of calendars--------------
#if (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1090) || (__IPHONE_OS_VERSION_MIN_REQUIRED)
    if(!eventStore) eventStore = [[EKEventStore alloc] init];
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)  //.............put this back in...
     {
         if (granted)
         {   
NSLog(@"granted permission to eventstore!");
            authorizedEventStore = YES;
            authorizedCalendar();
         }
         else
         {
NSLog(@"Not granted");
            authorizedEventStore = NO;
            notAuthorized();
         }
     }];
#else
NSLog(@"not able to request");
    if(!eventStore) eventStore = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskEvent];
    authorizedEventStore = YES;
    authorizedCalendar();
#endif
    //------------------end check authorization of calendars--------------
4

2 回答 2

2

要在 OS X 上请求访问权限,请使用:

EKEventStore *eventStore = nil;
if ([EKEventStore respondsToSelector:@selector(authorizationStatusForEntityType:)]) {
    // 10.9 style
    eventStore = [[EKEventStore alloc] init];
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
    {
        // your completion
    }];
} else {
    // 10.8 style
    eventStore = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskEvent ];
}
于 2013-10-28T10:58:38.193 回答
2

要拥有一个在多个操作系统版本上运行的应用程序:

  • 将您的 Base SDK 设置为您支持的操作系统的最新版本,在您的情况下为 10.9
  • 将部署目标设置为您希望代码启动的最早操作系统
  • 对于早期版本的操作系统中不存在的所有调用,您必须在调用之前进行测试,方法是使用 respondsToSelector:(用于方法)或针对 nil 进行测试(用于函数和静态)。如果您愿意,可以检查操作系统版本,但检查特定调用更为可靠。

另请参阅: 如何有条件地使用新的 Cocoa API以及 如何在为多个版本编译时包含对仅存在于一个操作系统版本中的方法的调用?

于 2013-10-28T11:07:18.397 回答