Основные данные NSPersistentStoreCoordinator Прервать от входящего телефонного звонка, SWIFT

Я потратил много времени, чтобы моя модель Core Data работала эффективно для моего приложения для iOS в процессе разработки. По большей части у меня все работает без сбоев, но я столкнулся с уникальной ошибкой загрузки моих данных на днях случайно. Я только что запустил приложение на своем iPhone для тестирования, и как только оно запустилось и начало загружать данные с использованием Core Data, мне позвонила моя сестра. Время было довольно случайным, потому что это перерыв, казалось, вызвало abort() функция от persistentStoreCoordinator в AppDelegate,

Вот код, на который я ссылаюсь:

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
    // Create the coordinator and store
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("DataModel.sqlite")
    var failureReason = "There was an error creating or loading the application's saved data."
    let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
        NSInferMappingModelAutomaticallyOption: true]
    do {
        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions)
    } catch {
        // Report any error we got.
        var dict = [String: AnyObject]()
        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
        dict[NSLocalizedFailureReasonErrorKey] = failureReason

        dict[NSUnderlyingErrorKey] = error as NSError
        let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
        // Replace this with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")

        abort()  // THIS
    }

    return coordinator
}()

Очевидно, я вижу, где Apple прокомментировала, что abort() Функция должна использоваться только во время разработки и должна быть удалена один раз в производстве, но мне интересно, кто-нибудь может показать мне, как правильно обрабатывать ошибки такого типа?

Я не загружаю огромное количество данных, и я думаю, что все, что мне нужно сделать в этом случае, это просто перезапустить процесс загрузки.

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

1 ответ

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

Однако вы можете попробовать еще раз, если считаете, что это того стоит. Вызов addPersistentStoreWithType снова, с теми же аргументами, и посмотреть, работает ли он. Проверьте возвращаемое значение - если оно не равно нулю и если не было выдано никакой ошибки, все готово. Пока вы не вернетесь из этой отложенной инициализации var, вы можете продолжать вызывать этот метод столько раз, сколько необходимо.

Другие вопросы по тегам