Почему я не могу использовать «описание» в качестве имени атрибута для сущности Core Data? - PullRequest
18 голосов
/ 17 января 2011

У меня есть простая сущность Core Data, у которой был строковый атрибут с именем «description».Сбой программы при попадании:

valueForKey:@"description"

Я изменил атрибут "description" на "текст" и проблема решена.

Почему это происходит?

Is "description "зарезервированное ключевое слово в базовых данных?

Это связано с вызовом метода описания из NSObject?

Есть ли ссылка на эти зарезервированные ключевые слова, если они существуют?

Ответы [ 3 ]

25 голосов
/ 18 января 2011

Поскольку он конфликтует с методом -description в NSObject (напомним, что Core Data динамически генерирует методы доступа и мутаторы свойств - свойство с именем «description» потребует создания метода доступа с именем -description). Это задокументировано в Руководстве по программированию базовых данных и в справочнике классов NSPropertyDescription :

Обратите внимание, что имя свойства не может совпадать с именем метода без параметров в NSObject или NSManagedObject. Например, вы не можете дать свойству имя «описание». Существуют сотни методов в NSObject, которые могут конфликтовать с именами свойств, и этот список может расти без предупреждения от каркасов или других библиотек. Вам следует избегать очень общих слов (таких как «шрифт» и «цвет») и слов или фраз, которые пересекаются с парадигмами какао (таких как «isEditing» и «objectSpecifier»).

4 голосов
/ 17 января 2011

description не является зарезервированным ключевым словом в CoreData, но это свойство для всех объектов Objective-C по своей сути. Это часть класса NSObject.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/description

0 голосов
/ 18 января 2011

Я подозреваю (хотя я не уверен), что проблема заключается в создании аксессора Core Data во время выполнения. Core Data синтезирует средства доступа (и установщики) для атрибутов во время выполнения и добавляет эти средства доступа в соответствующий класс (опять же, во время выполнения). Если Core Data создает новый метод description, переопределяющий -[NSObject description] и помещающий в метод логику транзакций и т. Д., То любой код, вызывающий -[NSObject description], может вести себя «плохо».

...