Как справиться с падением CoreData в iOS Swift? - PullRequest
0 голосов
/ 11 мая 2018

Мне нужно справиться с крахом основных данных. Мой код потерпел крах на managedObjectContext.save (). Но блок catch не поймал ни одного исключения. Чтобы избежать сбоя, как лучше написать свой блок Catch Вот мой код.

do {
      try managedObjectContext.save()              
   } 
catch let error as NSError {
      Print.print("Error saving data store: \(error)")
     }

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

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

Что более важно, вы не будете перехватывать такое исключение с try-catch в Swift. В действительности Swift try-catch не имеет ничего общего с исключениями, но является высокоуровневым API для перехвата зарегистрированных ошибок. В вашем случае вы просто перехватываете ошибку, которая может появиться при сохранении ваших данных в базе данных. Но ошибка возникла немного глубже, как кажется.

Чтобы продвинуться дальше, все основные данные по-прежнему полностью находятся в объективе C, который имеет совершенно другую систему для генерирования исключений, и хотя эти исключения МОГУТ быть перехвачены с целью C try-catch, это же исключение не будет перехвачено тем из Swift. То, что сделала эта система, только заменило ввод указателя на ошибку в метод: .save(&error), который использовался в targetC. И ваш блок catch будет срабатывать только тогда, когда эта ошибка не равна нулю.

0 голосов
/ 11 мая 2018

Это пример сохранения данных с использованием CoreData. Это может вам помочь.

 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        if let entity = NSEntityDescription.entity(forEntityName: "Employees", in: context){
           let myItem = NSManagedObject(entity: entity, insertInto: context)
            myItem.setValue(nameTF.text, forKey: "names")
            myItem.setValue(15655, forKey: "mobileNo")

            do {
                try context.save()

            }catch let nserror as NSError{
                print("ERROR: Coredata error \(nserror)")
            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...