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