Автоматический синтез @property не работает на подклассе NSManagedObject
После обновления до последней версии Xcode 4.5 для iOS6 прошлой ночью я получаю предупреждения и ошибки, подобные этой
Свойство mapAnnotation требует определения метода mapAnnotation - используйте @synthesize, @dynamic или предоставьте реализацию метода в реализации этого класса
из-за отсутствия @synthesize заявлений и даже ошибок о неизвестных iVars, если я их использую.
Дело в том, что я думал, что нет необходимости писать эти операторы @synthesize с момента последнего обновления Xcode до 4.5, которое вышло с Mountain Lion, И все мои проекты работали без них, прежде чем я обновил Xcode вчера вечером (я удалил целая куча операторов @synthesize из моих файлов тогда) Это даже до сих пор в примечаниях к выпуску:
• Команда Objective-C @synthesize генерируется по умолчанию при использовании свойств.
Так что я запутался, мне не хватает новой настройки проекта, которая включает автоматическую генерацию @synthesize?
Но это даже не работает, когда я создаю новый проект и пробую
1 ответ
Я столкнулся с той же проблемой и нашел причину и решение.
Если вы посмотрите на файл заголовка NSManagedObject в iOS 6 SDK, вы увидите "NS_REQUIRES_PROPERTY_DEFINITIONS", который заставляет классы указывать @dynamic или @synthesize для свойств.
(Вы можете увидеть NS_REQUIRES_PROPERTY_DEFINITIONS в разнице API между iOS 5.1 и iOS 6.0.)
Это потому, что компилятор должен знать, хотите ли вы, чтобы свойство было динамическим или синтезированным, особенно при реализации подкласса класса NSManagedObject.
Я мог бы решить эту проблему, просто добавив строки @synthesize явно для свойств, отличных от @dynamic, в подклассах NSManagedObject.