Сбой NSPersistentDocument при создании постоянного хранилища

Недавно я добавил новую сущность в свою модель Core Data, поэтому я создал новую версию модели и модель сопоставления для нее. Однако теперь мой NSPersistentDocument падает без видимой причины:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
                                                                        [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

BOOL success = [self configurePersistentStoreCoordinatorForURL:storeURL ofType:typeName modelConfiguration:nil storeOptions:options error:error]; // Line that crashes

Журналы консоли:

*** -[NSCFArray insertObject:atIndex:]: попытка вставить ноль

Вот трассировка стека, если поможет: Stacktrace

Удаление модели сопоставления не помогает, поэтому я предполагаю, что это потому, что документ пытается загрузить неправильную/отсутствующую модель данных, но я не нашел способа сказать, что он должен использовать данную модель данных.

Изменить: когда я использую свой собственный класс абстракции Core Data для iOS, все в порядке. Таким образом, корень всех зол, кажется, NSPersistentDocument. На самом деле я не хочу переключаться обратно на NSDocument и должен снова реализовать обработку основных данных, поэтому любая помощь очень ценится!


person JustSid    schedule 09.03.2011    source источник


Ответы (2)


Вы, вероятно, внесли изменения в модель, которые не может обработать автоматическая или «предполагаемая» миграция. Вероятно, вам придется предоставить модель сопоставления, чтобы подробно описать, как должна выполняться миграция.

О, и убедитесь, что ваша старая и новая модели имеют версию, т.е. имеют номер версии. В противном случае автоматическая миграция не сможет определить, какая модель является старой, а какая новой.

person TechZen    schedule 09.03.2011
comment
Проблема в том, что у меня есть модель отображения. И обе модели данных находятся в контейнере .xcdatamodeld, а в новой установлена ​​текущая версия. - person JustSid; 09.03.2011
comment
Хорошо, после еще нескольких тестов и экспериментов я нашел настоящую причину: старый файл .mom все еще был там, а также новый файл .momd. Так что в основном вы были правы в своем ответе. - person JustSid; 10.03.2011
comment
Ах, да, я забыл об этом. По какой-то причине старые скомпилированные файлы мамы могут зависать после того, как вы добавили новый. Обычно вам нужно удалить приложение с симулятора/устройства и очистить сборку, чтобы избавиться от него. Надеюсь, они исправили это в Xcode 4. - person TechZen; 10.03.2011

Хорошо, я заработал, перезаписав - (id)managedObjectModel и сам вернув действительную управляемую объектную модель. Похоже, NSPersistentDocument не может сделать это самостоятельно для моделей с несколькими версиями.

person JustSid    schedule 09.03.2011
comment
Это мог быть поврежденный файл модели. В конце концов, это просто XML/plist. Редко, но иногда они ломаются. - person TechZen; 10.03.2011