xcode - 自动@property 合成不适用于 NSManagedObject 子类

标签 xcode properties ios6 synthesize

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

Property 'mapAnnotation' requires method 'mapAnnotation' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation



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

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

• Objective-C @synthesize command is generated by default when using properties.



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

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

最佳答案

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

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

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

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

我可以简单地通过为 NSManagedObject 子类中的 @dynamic 以外的属性显式添加 @synthesize 行来解决这个问题。

关于xcode - 自动@property 合成不适用于 NSManagedObject 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12510849/

相关文章:

iphone - 第一次尝试动态过滤搜索数组

swift - xcode 版本 8.0 (8A218a) 的旧版 swift 使用什么版本的 swift?

c# - 是否有可能 "extend"属性 "class"?

android - 如何在 android 中配置 java.util.logging.logger 以使用放置在 sdcard 上的日志记录属性文件?

ios - ACAccountStore 错误 6 (ACErrorAccountNotFound) 和 8

ios - 在 iOS 6 中将委托(delegate)设置为 nil

ios - 数组在本应明确包含元素时为空

xcode - OpenGL ES 1.1 到 2.0 的重大变化?

ios - objective-c KVO : object vs changeDictionary

ios7 - iOS8 iOS7 和 iOS6 阻止模态呈现的 View Controller 的旋转