Swift与Core Data中UUID相关运行时崩溃问题求助
Swift与Core Data中UUID相关运行时崩溃问题求助
我现在遇到了一个和UUID相关的运行时崩溃问题,实在有点头疼,想请大家帮忙看看。我会把相关的代码文件片段、崩溃信息都贴出来,麻烦各位大佬指点一下!
先给大家说下整体的结构:我用Persistence Controller、DeflectionLogEntity、DeflectionLogViewModel和DeflectionLogsView来实现一个挠度日志列表,在DeflectionLogsView的预览里也会用到这些。之前有段时间解决过这个问题,但后来DeflectionLogsView里的按钮又出了问题,现在崩溃又回来了。作为Swift新手,我最大的困惑就是不知道该从哪里入手排查错误,如果大家能给一些调试的思路那就更好了!
DeflectionLogsView中的列表代码
List(viewModel.deflectionLogs) { log in NavigationLink(destination: ContentView(deflectionLog: log)) { HStack { VStack(alignment: .leading) { Text(log.logName ?? "New Log") .font(.title2) .bold() Text(log.logDescription ?? "New Log Description") } Spacer() Text(log.logDate.formatted()) // 这里是格式化日期的代码 } } }
Persistence Controller代码
static var preview: PersistenceController = { let controller = PersistenceController(inMemory: true) let viewContext = controller.persistenceContainer.viewContext // 为预览创建示例数据 for i in 1...5 { let log = DeflectionLogEntity(context: viewContext) log.id = UUID() log.logName = "Test Log \(i)" log.logDescription = "Description for test log \(i)" log.logDate = Date() } do { try viewContext.save() } catch { let nsError = error as NSError fatalError("Unresolved error \(nsError), \(nsError.userInfo)") } return controller }() // Core Data容器配置 lazy var persistenceContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "YarderPro") container.loadPersistentStores { _, error in if let error = error as NSError? { fatalError("Unresolved error \(error), \(error.userInfo)") } } container.viewContext.automaticallyMergesChangesFromParent = true container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy return container }()
DeflectionLogsViewModel中的fetch和add方法
func fetchDeflectionLogs(sortedBy key: String = "logDate", ascending: Bool = true) { let request: NSFetchRequest<DeflectionLogEntity> = DeflectionLogEntity.fetchRequest() request.sortDescriptors = [NSSortDescriptor(key: key, ascending: ascending)] do { deflectionLogs = try viewContext.fetch(request) } catch { print("Failed to fetch deflection logs: \(error)") } } // 添加新的挠度日志 func addDeflectionLog() { let log = DeflectionLogEntity(context: viewContext) log.logName = "New Log" // 直接设置默认值 log.logDescription = "..." log.logDate = Date() log.id = UUID() saveContext() }
我尝试过的解决方法
- 我检查过DeflectionLogEntity的实例,确保UUID不会为空——毕竟UUID本身就是非空类型,但这并没有解决问题
- 我加了一些错误处理逻辑,但也没起到作用
现在的问题还是一样:崩溃信息指向UUID._unconditionallyBridgeFromObjectiveC,而且在模拟器运行APP时也会崩溃,所以我觉得这和预览代码无关。我能追踪到的错误位置在Foundation.UUID文件的第51行,错误信息是:Thread 1: EXC_BREAKPOINT (code=1, subcode=0x180b6ef1c),对应的汇编代码如下:
0x180b6ef00 <+168>: strb w10, [x19, #0xd] 0x180b6ef04 <+172>: strb w11, [x19, #0xe] 0x180b6ef08 <+176>: strb w8, [x19, #0xf] 0x180b6ef0c <+180>: ldp x29, x30, [sp, #0x50] 0x180b6ef10 <+184>: ldp x20, x19, [sp, #0x40] 0x180b6ef14 <+188>: add sp, sp, #0x60 0x180b6ef18 <+192>: ret -> 0x180b6ef1c <+196>: brk #0x1 0x180b6ef20 <+200>: brk #0x1 0x180b6ef24 <+204>: mov x8, #-0x2000000000000000 ; =-2305843009213693952 0x180b6ef28 <+208>: stp xzr, x8, [sp, #0x18] 0x180b6ef2c <+212>: add x20, sp, #0x18
真的非常需要大家的帮助,我现在有点急了!
备注:内容来源于stack exchange,提问作者Drew Hengehold
相关产品推荐
相关产品推荐

