Почему я не могу использовать "описание" в качестве имени атрибута для объекта 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" ).

Ответ 3

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