Сбой NSPersistentStoreCoordinator

#iphone #core-data #xcode4 #ios5

#iPhone #ядро-данные #xcode4 #ios5

Вопрос:

Я недавно обновился с xcode 3.x до 4.2, и у меня возникли проблемы с core data при запуске приложений в 4.2. Я также обновился до iOS 5, так что, возможно, проблема там, я не совсем уверен.

Приложения нормально работали в 3.x, но сбой в 4.2. Проблема возникает всякий раз, когда я пытаюсь получить доступ NSPersistentStoreCoordinator к объекту. Вот пример области, в которой происходит сбой приложения.

 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator_ != nil) {
        return persistentStoreCoordinator_;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory]    URLByAppendingPathComponent:@"GraffitiMap.sqlite"];

    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:amp;error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return persistentStoreCoordinator_;
}
  

Он обналичивается в строке: persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

Чего мне не хватает при переходе приложения с xcode 3.x на 4.2 или обновлении до iOS 5?

Комментарии:

1. Какую ошибку вы получаете в консоли, когда происходит сбой? Кроме того, попробуйте присвоить [self managedObjectModel] промежуточной переменной, чтобы вы могли видеть, что вы там получаете.

Ответ №1:

Я столкнулся с этой проблемой раньше, после обновления до Xcode 4.2 и iOS 5.

Мое приложение продолжало сбой [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; с ошибкой EXEC_BAD_ACCESS , я провел много тестов, чтобы выяснить, в чем проблема. Наконец, после того, как я удалил все запросы на выборку в модели данных, ошибка исчезла и появилась другая ошибка «имя объекта не найдено». Итак, я пытался удалять запросы на выборку один за другим и тестировать снова и снова, чтобы выяснить, какой из них является «плохим» запросом на выборку. И я обнаружил, что два запроса на выборку выполняют одно и то же (имеют одинаковые критерии для одного и того же объекта), хотя они имеют другое имя, чем я удалил один из них, ошибка была исправлена полностью.

Сегодня я снова сталкиваюсь с этой проблемой, и я уверен, что на этот раз нет повторяющегося запроса на выборку, но ошибка все еще остается. Я думал, что Apple добавит некоторые проверки в CoreData, подобные этой, в новой iOS5, но не может найти никаких документов, которые описывают это.

Надеюсь, это поможет вам

Комментарии:

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

2. Если вы используете два запроса, которые выполняют одно и то же, почему бы не удалить один из них. Или, может быть, вы можете добавить некоторые критерии для одного из запросов, например «1 = 1», чтобы сделать их разными.