Автоматический синтез @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.

Другие вопросы по тегам