Automatic @property synthesize not working on NSManagedObject subclass

坚强是说给别人听的谎言 提交于 2019-11-30 10:39:30

问题


After updating to the newest Version of Xcode 4.5 for iOS6 last night, i get Warnings and Errors like this

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

because of missing @synthesize Statements, and even Errors about unknown iVars if i use them.

The thing is, i thought it was not necessary to write these @synthesize statements since the last Xcode Update to 4.5 that came out with Mountain Lion, AND all my projects worked without them before i've updated Xcode last night (i've deleted a whole bunch of @synthesize statements from my files back then) It's even still in the Release-Notes:

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

So i'm confused, am i missing a new Project-Setting that turns automatic @synthesize generation on?

But it's not even working when i create a new Project and try it


回答1:


I faced the same problem and found the reason and the solution.

If you look at the header file of NSManagedObject in iOS 6 SDK, you'll see "NS_REQUIRES_PROPERTY_DEFINITIONS" which forces classes to specify @dynamic or @synthesize for properties.

(You can see the NS_REQUIRES_PROPERTY_DEFINITIONS in the API diff between iOS 5.1 and iOS 6.0.)

This is because the compiler has to know if you want a property to be dynamic or synthesized especially in the implementation of a subclass of NSManagedObject class.

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



来源:https://stackoverflow.com/questions/12510849/automatic-property-synthesize-not-working-on-nsmanagedobject-subclass

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!