Подтвердить что ты не робот

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

Но он даже не работает, когда я создаю новый проект и пробую его

4b9b3361

Ответ 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.