iOS: какие ошибки могут быть вызваны NSPersistentStoreCoordinator addPersistentStoreWithType: конфигурация: URL: опции: ошибка: - PullRequest
4 голосов
/ 09 июня 2011

Я создаю приложение для iOS с использованием CoreData.Небольшое количество моих пользователей (примерно 1/1000) сообщают, что приложение вылетает вскоре после запуска.Я подозреваю, что координатор постоянного хранилища не может добавить базу данных в качестве постоянного хранилища.Мне не удалось воспроизвести какие-либо ошибки при тестировании, и я не могу получить отладочную информацию от моих пользователей.Кто-нибудь знает какие-либо распространенные ошибки, которые генерирует этот метод?

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator_ != nil) return persistentStoreCoordinator_;

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

    NSError *error = nil;

    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];

    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return persistentStoreCoordinator_;
}

Ответы [ 2 ]

0 голосов
/ 19 октября 2016

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

Решение:

Если у вас естьошибка типа «Модель, используемая для открытия магазина, несовместима с моделью, используемой для создания магазина».затем просто удалите БД и создайте новую или удалите приложение и переустановите.

Если я ошибаюсь, пожалуйста, дайте мне знать.

0 голосов
/ 09 июня 2011

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

Единственное, что я мог подумать, это проверить: (1) случайно записать или перезаписать хранилище где-нибудь еще в коде, например, вы намереваетесь создать резервную копию файла, скопировав его, но вместо этого перезаписать его частично.(2) Изменение прав доступа к файлу.

Я видел случаи обоих на MacOS, но никогда на iOS.Хранилище находится в папке с документами и имеет очень общее имя, так что, возможно, под iOS 4.x вы можете скопировать файл поверх него.

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

...