#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», чтобы сделать их разными.