25

昨晚更新到适用于 iOS6 的 Xcode 4.5 的最新版本后,我收到这样的警告和错误

属性 'mapAnnotation' 需要定义方法 'mapAnnotation' - 使用 @synthesize、@dynamic 或在此类实现中提供方法实现

因为缺少@synthesize 语句,如果我使用它们,甚至会出现关于未知 iVar 的错误。

问题是,我认为自从上一次 Xcode 更新到 4.5 后,我认为没有必要编写这些 @synthesize 语句,它与 Mountain Lion 一起出现,并且在我昨晚更新 Xcode 之前,我所有的项目都在没有它们的情况下工作(我已经删除了当时我的文件中有一大堆@synthesize 语句)它甚至还在发行说明中:

• Objective-C @synthesize 命令在使用属性时默认生成。

所以我很困惑,我是否错过了一个新的项目设置来打开自动@synthesize 生成?

但是当我创建一个新项目并尝试它时它甚至都不起作用

4

1 回答 1

36

我遇到了同样的问题并找到了原因和解决方案。

如果您查看 iOS 6 SDK 中 NSManagedObject 的头文件,您会看到“NS_REQUIRES_PROPERTY_DEFINITIONS”,它强制类为属性指定@dynamic 或@synthesize。

(您可以在 iOS 5.1 和 iOS 6.0 之间的 API 差异中看到 NS_REQUIRES_PROPERTY_DEFINITIONS。)

这是因为编译器必须知道您是否希望属性是动态的或综合的,尤其是在 NSManagedObject 类的子类的实现中。

I could solve this problem simply by adding the @synthesize lines explicitly for the properties other than @dynamic in NSManagedObject subclasses.

于 2012-09-22T14:33:51.773 回答