2011-01-29 3 views
0

Использование this руководство я создал статическую библиотеку (назовем ее AppCore), которые могут быть разделены между версиями Mac OS X и IOS одного приложения. Эта статическая библиотека использует Core Data, и ее точка зрения заключается в совместном использовании версий модели и схемы между различными реализациями.NSArrayController и обращаясь к общему, статической, на основе основных данных библиотеки

Я создал проект на основе NSPersistentDocument, который будет зависеть от этого AppCore. В этом проекте я добавил ссылку на файл .xcdatamodel. Затем я создал простой табличный вид с кнопками add/remove для редактирования массива одного типа сущности с помощью элемента «новый основной объект данных». Это создало экземпляр NSArrayController и необходимые привязки для поведения add/remove.

Теперь все работает нормально, когда я использую класс по умолчанию для объектов Core Data (NSManagedObject), и я могу добавлять новые строки с помощью кнопок +/-. Однако, когда я изменить класс реализации объекта к обычаю один, я получаю сообщение об ошибке

Failed to create new object 

Это, кажется, исходит из NSArrayController и это, кажется, не в состоянии создать экземпляр требуемого лица. Я могу, однако, создать в NSPersistentDocument подкласса:

[NSEntityDescription insertNewObjectForEntityForName:@"SomeEntity" inManagedObjectContext:[self managedObjectContext]] 

Что меня смущает почему экземпляр NSArrayController не может. Если я правильно понимаю, контроллеру массива дается указание создать сущность, а не класс, и я предполагаю, что сущности создаются с помощью класса NSEntityDescription. Я мог бы реализовать свою собственную версию контроллера массива add:, но опять же, может быть, здесь что-то принципиально неправильно. Я не коснулся init: s, а реализация класса пользовательских сущностей просто для удобства, чтобы получить доступ к атрибутам напрямую.

Я попытался изменить базовый SDK на AppCore, но без эффекта. В настоящее время он использует версию iOS, но я не уверен, как это должно быть. Это другой вопрос, но если он не связан, я могу задать его здесь по отдельному вопросу.

Итак, чтобы обобщить, почему не удается создать экземпляр этого объекта NSArrayController?

Заранее спасибо.

Update

Это работает, если я добавляю SomeEntity класс от AppCore зависимого проекта в качестве ссылки. Это не самый удобный способ, так как изменения в AppCore также должны быть переданы в проекты dependatnt.

ответ

0

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