首页 > 解决方案 > SwiftUI 应用程序中上下文保存的核心数据 Objective-C 异常

问题描述

当我在 iOS 设备上全新安装 SwiftUI 应用程序时,Core Data 首次尝试保存时出现异常。

我的应用程序委托调用具有此 CloudKit 调用的函数:

iCloud.container.fetchUserRecordID(){ recordID, error in
  DispatchQueue.main.async {
    if let recordID = recordID{
      let context = PersistenceController.shared.container.viewContext
      //...

      do{
        try context.save() //<-- <!!!> Thread 1: hit Objective-C exception <!!!>
      }catch{
        print("fetchiCloudUserId CD Error")
        print(error)
      }
    }
  }
}

我掌握的有关崩溃的唯一其他信息是在 Xcode 中:

在此处输入图像描述

我的猜测是,不知何故,Core Data 还没有准备好。我的PersistenceController样子是这样的:

struct PersistenceController {
  static let shared = PersistenceController()
  let container: NSPersistentContainer

  init(){
    container = NSPersistentContainer(name: "Avid")
    
    container.loadPersistentStores(completionHandler: { storeDescription, error in
      if let error = error as NSError? {
        print("=========\nUnresolved error \(error), \(error.userInfo)")
      }
    })
  }
}

在设备上再次重建我的应用程序后,不会发生异常。有任何想法吗?

标签: swiftcore-dataswiftui

解决方案


非常感谢 @CouchDeveloper 让我走上正轨。我不知道我可以让 Xcode 透露更多关于这种模糊异常的信息。我与另一位开发人员交谈并了解到我可以设置一个符号断点来告诉我它崩溃的原因。这就是我所做的。

在断点导航器(Xcode 中的左侧列选项卡之一)中创建一个新的符号断点。

象征: objc_exception_throw

条件

(BOOL)[(NSString *)[[(id)$arg1 class] className] isEqualToString:@"_NSCoreDataOptimisticLockingException"] == 0

行动Debugger Command

po $arg1

在此处输入图像描述

设置完成后,控制台显示我在设置的唯一字段上存在约束冲突。我能够对此采取行动并修复它。


推荐阅读