Исключить объект из NSPersistentDocument

У меня есть существующее (и полностью рабочее) приложение, использующее NSPersistentDocument для сохранения файлов приложения.
Теперь мне нужно создать новый объект, этот новый объект совершенно не связан с файлами приложения и будет содержать кеш приложения, поэтому я будет использовать его для сохранения в отдельном файле.
Мой проект содержит MyDocument.xcdatamodeld, используемый NSPersistentDocument, для реализации новой функции я создал новую модель данных Cache.xcdatamodeld и добавил в модель новый объект (я не писал код, просто использовал мастера XCode), но когда я запускаю приложение и пытаюсь открыть существующий файл приложения, я получаю сообщение об ошибке

Модель, использованная для открытия магазина, несовместима с моделью, использованной для создания магазина.

Я понимаю, что это происходит из-за того, что конфигурация модели для новой сущности такая же, как и для NSPersistentDocument, но как ее отделить?
Создание новой конфигурации в модели данных не работает, поскольку сущность нельзя удалить из сущности по умолчанию.
Есть идеи, как заставить NSPersistentDocument игнорировать новую сущность и продолжать работать со старой моделью данных?

Я не публикую исходный код, потому что это происходит просто при добавлении новой модели и сущности в проект.


person dafi    schedule 09.01.2016    source источник


Ответы (1)


Из документации свойство managedObjectModel NSPersistDocument:

@property(readonly, strong) NSManagedObjectModel *managedObjectModel

Обсуждение

По умолчанию платформа Core Data создает объединенную модель из всех моделей в комплекте приложений ([NSBundle mainBundle]). Вы можете переопределить это свойство и вернуть конкретную модель, чтобы использовать ее для создания постоянных хранилищ. Типичная реализация может включать код, подобный следующему фрагменту:

NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *path = [bundle pathForResource:@"MyModel" ofType:@"mom"];
NSURL *url = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
person Willeke    schedule 10.01.2016
comment
Вау, я полностью пропустил описание API, все работает отлично, спасибо! - person dafi; 10.01.2016