簡體   English   中英

如何處理iOS Swift中的CoreData崩潰?

[英]How to handle a CoreData crash in iOS Swift?

我需要處理核心數據崩潰。 我的代碼在ManagedObjectContext.save()上崩潰了。 但是catch塊沒有捕獲任何異常。 為了避免崩潰,我該如何更好地編寫Catch塊,這是我的代碼。

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

這是使用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)")
            }

        }

這真的看起來像您弄亂了上下文的初始化,持久性存儲及其協調器一樣。 您最好調查一下。 類似的還有帖子已經在這么喜歡這一個

更重要的是,您不會在Swift中使用try-catch攔截此類異常。 實際上,Swift try-catch與異常沒有任何關系,但是是一種高級API,可讓您攔截報告的錯誤。 就您而言,您只是攔截了將數據保存到數據庫時可能報告的錯誤。 但是錯誤似乎更深了。

更進一步,整個核心數據仍然完全在objectiveC中,它具有完全不同的引發異常的系統,盡管可以使用objectiveC try-catch截獲那些異常,但是同一異常將不會被Swift截獲。 該系統所做的只是替換了將錯誤的指針輸入到.save(&error)中使用的.save(&error)方法。 而且,只有在此錯誤為非null時,您的catch塊才會觸發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM