You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:09:33