Используя это руководство Я создал статическую библиотеку (назовем ее AppCore ), которую можно использовать совместно для версий Mac OS X и iOS одного приложения. Эта статическая библиотека использует Базовые Данные, и ее цель состоит в том, чтобы разделять версии модели и версии схемы между различными реализациями.
Я создал NSPersistentDocument
проект, основанный на этом AppCore . В этом проекте я добавил ссылку на файл .xcdatamodel. Затем я создал простое табличное представление с кнопками добавления / удаления для редактирования массива одного типа сущности с помощью вспомогательного элемента «новая основная сущность данных». Это создало экземпляр NSArrayController
и необходимые привязки для поведения добавления / удаления.
Теперь все работает нормально, когда я использую класс по умолчанию для сущностей базовых данных (NSManagedObject
) и могу добавлять новые строки с помощью кнопок +/-. Однако, когда я изменяю класс реализации сущности на собственный, я получаю ошибку
Failed to create new object
Это, кажется, происходит от NSArrayController
, и кажется, что он не может создать экземпляр требуемой сущности. Однако я могу создать его в подклассе NSPersistentDocument
:
[NSEntityDescription insertNewObjectForEntityForName:@"SomeEntity" inManagedObjectContext:[self managedObjectContext]]
Меня смущает, почему экземпляр NSArrayController
не может. Если я правильно понимаю, контроллер массива получает указание создать сущность, а не класс, и я предполагаю, что сущности создаются с помощью класса NSEntityDescription
. Я мог бы реализовать свою собственную версию контроллера массива add:
, но опять же, возможно, здесь что-то в корне не так. Я не коснулся init:
s, и реализация пользовательского класса сущности просто для удобства, для прямого доступа к атрибутам.
Я попытался изменить базовый SDK на AppCore , но безрезультатно. В настоящее время он использует версию для iOS, но я не уверен, как это должно быть. Это другой вопрос, но если он не связан, я мог бы задать его здесь по отдельному вопросу.
Итак, подведем итог: почему NSArrayController
не может создать экземпляр этой сущности?
Заранее спасибо.
Обновление
Это работает, если я добавлю класс SomeEntity
из AppCore в зависимый проект в качестве ссылки. Это не самый удобный способ, поскольку модификации AppCore должны распространяться и на зависимые проекты.