更新到macOS后,获取有关"动态访问器失败"的未知错误

Rya*_*uza 12 macos xcode cocoa objective-c macos-sierra

在升级到macOS Sierra(10.12)和Xcode 8.0(8A218a)后,我开始在我的macOS/Cocoa应用程序(用Objective-C编写)中收到许多错误消息,这些消息遵循以下格式:

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDInfo while resolving selector 'uniqueId' on class 'ABCDInfo'.  Did you remember to declare it @dynamic or @synthesized in the @implementation ?

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDContact while resolving selector 'uniqueId' on class 'ABCDContact'.  Did you remember to declare it @dynamic or @synthesized in the @implementation ?

[error] warning: dynamic accessors failed to find @property implementation for 'uniqueId' for entity ABCDEmailAddress while resolving selector 'uniqueId' on class 'ABCDEmailAddress'.  Did you remember to declare it @dynamic or @synthesized in the @implementation ?

[error] warning: dynamic accessors failed to find @property implementation for 'address' for entity ABCDEmailAddress while resolving selector 'address' on class 'ABCDEmailAddress'.  Did you remember to declare it @dynamic or @synthesized in the @implementation ?
Run Code Online (Sandbox Code Playgroud)

这些都不是我正在使用的第三方开发人员库的代码或代码,并且对这些变量名称进行搜索(即:'uniqueId'或'ABCDInfo')不会提取任何内容,表明它不在我的项目中.

我看到(另据报道,在苹果的开发者论坛这个问题两次第1期第2期),但两个问题仍然没有答案

我的问题是:是什么导致这些错误消息,我该如何解决它们?它不会导致我的应用程序崩溃,但我宁愿弄清楚并理解什么是错的.

Ras*_*n L 8

首先让我们看看@synthesize和@dynamic是什么:

  • @synthesize将为您的属性生成getter和setter方法
  • @dynamic告诉编译器getter和setter方法不是由类本身实现的,而是由其他地方实现的(如超类或将在运行时提供)

联系人现在要求使用邮件/联系人框架的任何人都需要使用uses-contacts权利进行编码.

您需要通过授予"联系人访问权限"权限来沙箱化您的应用.警告仍将被记录,但这与XCode 8的另一个错误相关联,该错误记录了许多无用的事情.

Apple似乎不再接受非沙盒应用访问联系人(或位置或日历).

要对应用程序进行沙盒操作,请执行以下操作:转到项目设置>选择应用程序>启用应用程序SandBox,然后选择您正在使用的应用程序数据.