Проблемы миграции с UIManagedDocument - PullRequest
6 голосов
/ 19 марта 2012

Я начал использовать CoreData в своем приложении после уроков Stanford CS193P, касающихся использования нового класса iOS 5 UIManagedDocument.Сам подход довольно прост, но я не могу понять, как бороться с модификациями моделей, которые я продолжаю делать.Вот как я создаю экземпляр своего объекта UIManagedDocument (внутри appDelegate, чтобы его могли использовать все остальные классы):

if (!self.database) {
    NSURL *url=[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"AppName"];

    UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url];
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
    doc.persistentStoreOptions = options;
    self.database=doc;
    [doc release];
}

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я изменяю хоть немного своего .xcdatamodelЯ не могу получить все содержимое, ранее сохраненное в документе, а также создать новый экземпляр.Фактически, это создает следующее исключение:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores.  It cannot perform a save operation.'

Я думал, что установка свойства «options» управляемого документа решит проблему, но, по-видимому, этого недостаточно.Кто-нибудь может помочь?Не могу найти другие вопросы, которые действительно соответствуют моим точным потребностям.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

Перед тем, как изменить свою модель базовых данных, вам следует «Добавить версию модели».

1.Выберите оригинальный файл модели.(например, YourProject.xcdatamodel)

2.«Редактор» -> «Добавить версию модели ...».Затем добавьте новую версию модели (например, 2.0)

3.Вы получите новый файл модели.(например, YourProject 2.0.xcdatamodel).Изменить его.

4.Изменить текущую версию модели.Выберите верхний файл .xcdtatmodel -> «Вид» -> «Утилиты» -> «Показать инспектор файлов».Найдите тег «Versioned Core Data Model» и выберите правильную версию, которую вы хотите изменить.

Это также беспокоило меня долгое время.Надеюсь, что этот способ поможет вам ^^

0 голосов
/ 18 июля 2013

Убедитесь, что вы неправильно набрали NSDocumentDirectory как NSDocumentationDirectory.

   NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

NSDocumentDirectory верен!

0 голосов
/ 16 июля 2012

Существует действительно простое решение вашей проблемы.Просто удалите приложение с симулятора или устройства (коснитесь значка приложения на несколько секунд и коснитесь крестика, который появляется, когда значки приложений начинают покачиваться).Таким образом, Xcode обновляет UIManagedDocument вашего приложения.

...