У меня есть приложение в магазине приложений, и я использую службу ведения журнала, чтобы получить журналы сбоев и связанные с ними данные журнала. Я вижу прерывистый крах (низкое количество пользователей, затронутых и низкий число сбоев на пользователя), но это меня озадачивает.
Что происходит в этих сбоях, следующее:
-
Приложение запускает и инициализирует стек Core Datap >
-
Приложение пытается добавить хранилище SQL в NSPersistentStoreCoordinator со следующим кодом (
storeURL
):NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption : @(YES), NSInferMappingModelAutomaticallyOption : @(YES) }; sqlStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error];
-
При добавлении этого хранилища возникает одна из следующих ошибок:
NSError:
Домен = NSCocoaErrorDomain
Код = 256" Операция не может быть выполнена. (Cocoa ошибка 256.) "
UserInfo = 0x1dd946a0 {NSUnderlyingException = отказ авторизации, NSSQLiteErrorDomain = 23}
или
NSError:
Домен = NSCocoaErrorDomain
Код = 256" Операция не может быть выполнена. (Cocoa ошибка 256.) "
UserInfo = 0xc6525d0 {NSUnderlyingException = ошибка ввода-вывода диска, NSSQLiteErrorDomain = 10}
После этого условия приложение столкнется с ошибкой b/c для работы приложения требуется хранилище SQL. Я мог бы попытаться изящно справиться с этим сбоем, попробовав новый storeURL, но я не хочу, чтобы пользователь потерял существующие данные. Кроме того, я никогда лично не воспроизводил эту проблему и не основывался на низком числе пользователей, затронутых и разбитых журналах. Я считаю, что это проблема с низким уровнем воздействия и не повторяется при последующем запуске приложения.
Я надеюсь, что там есть гуру Core Data с некоторыми предложениями относительно того, как отлаживать и предотвращать/обрабатывать эти условия. Мой основной код инициализации стека данных прямо из генератора проекта xcode, и я исключил проблемы concurrency в том, что постоянный координатор хранилища инициализируется только один раз (при запуске), и эта ошибка возникает в этой инициализации.
С удовольствием предоставляем больше кода/информации, если это необходимо.
спасибо!