В моем приложении Какао на основе документов используется комбинация NSOutlineView / NSTreeController, связанная с хранилищем основных данных документа. Мой NSTreeController имеет предикат выборки isRoot == YES
. isRoot
- это временный логический атрибут со значением по умолчанию NO
. awakeFromInsert
звонки моей корневой модели:
[self setIsRoot:[NSNumber numberWithBool:YES]];
Я могу просто добавить объекты в иерархию, но когда я пытаюсь загрузить только что сохраненный документ, я получаю исключение:
[<NSDictionaryMapNode 0x1001a8190> valueForUndefinedKey:]: this class is not key value coding-compliant for the key isRoot.
Я могу обойти это исключение и успешно загрузить вновь сохраненный документ, если я изменю атрибут isRoot
на не-переходный в xcdatamodel, но, исходя из моего понимания флага переходного процесса, это не должно вызывать проблем, и это действительно не те данные, которые должны быть сохранены.
Я также пытался реализовать -isRoot
в подклассах NSManagedObject, чтобы вернуть соответствующее фиксированное значение, а также сделать тот же самый вызов setIsRoot:
в awakeFromFetch
, оба безрезультатно.
Есть ли какая-то другая тонкость, которую мне не хватает? Я не могу представить, что предикаты fetch не поддерживают временные атрибуты. Я не знаю много о внутренней работе Core Data, но мне кажется интересным, что он пытается найти isRoot
в классе, специфичном для магазина, а не в моем подклассе NSManagedObject.