#ios #core-data
#iOS #core-data
Вопрос:
Я создаю приложение для 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:amp;error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator_;
}
Ответ №1:
Вы можете посмотреть на ссылку на константы Core Data, но без каких-либо отладочных данных это не принесет вам большой пользы.
Единственное, что я мог бы проверить, это: (1) случайная запись или перезапись хранилища где-либо еще в коде, например, вы намереваетесь создать резервную копию файла, скопировав его, но вместо этого перезаписываете его частично. (2) Изменение разрешений для файла.
Я видел случаи обоих этих на macOS, но никогда на iOS. Хранилище находится в папке documents и имеет очень общее название, поэтому, возможно, в iOS 4.x вы могли бы скопировать файл поверх него.
Поскольку вы не сделали ничего особенного с постоянным хранилищем, я думаю, крайне маловероятно, что это является причиной сбоя. Если вы используете стандартный шаблонный код, вы говорите о чем-то, что тщательно протестировано и доработано. Я бы заподозрил ресурс определенного типа, например, изображение или аудиофайл, в пакете приложений, прежде чем я бы заподозрил магазин.
Комментарии:
1. Спасибо, @TechZen. Вы правы, проблема вовсе не в Core Data. Я, наконец, получил отчет о сбое от пользователя, и основной поток блокировался при разборе xml-документа. Ошибка новичка.
2. @Raider, у меня та же проблема, что и у вас: три сообщения об ошибках за два года, никаких сообщений о сбоях и вывод, что, должно быть, сбой при загрузке хранилища. Я потратил много часов на улучшение обработки ошибок при вызовах Core Data, но, возможно, я на неверном пути. Я не выполняю никакого синтаксического анализа xml, но я открываю магазин во время запуска приложения, поэтому возможно, что что-то еще блокирует для этих нескольких пользователей. Не могли бы вы предоставить более подробную информацию о вашем решении, пожалуйста? Кажется, это возможность для меня чему-то научиться 😉
Ответ №2:
Я думаю, вы добавили новый атрибут к сущностям, и именно поэтому old .sqlite не совпадает с new .
Решение :
Если вы получили сообщение об ошибке типа «Модель, используемая для открытия магазина, несовместима с той, которая использовалась для создания магазина». тогда просто удалите базу данных и создайте новую или удалите приложение и переустановите.
Если я ошибаюсь, пожалуйста, дайте мне знать.