Почему я не могу использовать "описание" в качестве имени атрибута для объекта Core Data?
У меня есть простой объект Core Data, который имеет строковый атрибут с именем "описание" .
Программа вылетает с ошибкой:
valueForKey:@"description"
Я изменил атрибут "описание" на "текст" и проблема была решена.
Почему это происходит?
Является ли "описание" зарезервированным ключевым словом в Core Data?
Связано ли это с вызовом метода описания из NSObject?
Есть ли ссылка на эти зарезервированные ключевые слова, если они существуют?
Ответы
Ответ 1
Поскольку он конфликтует с методом -description
в NSObject
(напомним, что Core Data динамически генерирует атрибуты свойств и мутаторы - описание с именем name должно требовать создания метода доступа, называемого -description
). Это описано в Руководстве по программированию основных данных и Ссылка на класс NSPropertyDescription:
Обратите внимание, что имя свойства не может быть таким же, как любое имя метода без параметров NSObject или NSManagedObject. Например, вы не можете присвоить свойству имя "описание". В NSObject есть сотни методов, которые могут конфликтовать с именами свойств, и этот список может расти без предупреждения из фреймворков или других библиотек. Вам следует избегать очень общих слов (например, "font" и "color" ) и слов или фраз, которые перекрываются с парадигмами Cocoa (такими как "isEditing" и "objectSpecifier" ).
Ответ 2
описание не зарезервированное ключевое слово в 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
Ответ 3
Я подозреваю (хотя я не уверен), что проблема связана с генерацией основных данных для среды разработки Data Data. Core Data синтезирует аксессоры (и сеттеры) для атрибутов во время выполнения и добавляет их в соответствующий класс (опять же, во время выполнения). Если Core Data создает новый метод description
, переопределяя -[NSObject description]
и помещая логику транзакций и т.д. В метод, тогда любой код, который вызывает -[NSObject description]
, может вести себя "плохо".