NSArrayController и обращение к общей статической библиотеке на основе Core Data - PullRequest
0 голосов
/ 30 января 2011

Используя это руководство Я создал статическую библиотеку (назовем ее 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 должны распространяться и на зависимые проекты.

1 Ответ

0 голосов
/ 07 февраля 2011

Бинго.Я пропустил флаг "-ObjC" для "других флагов компоновщика" зависимого проекта.Теперь все работает как шарм.

...