gpt4 book ai didi

iOS Core Data 乐观锁失败误报

转载 作者:行者123 更新时间:2023-11-29 05:50:33 24 4
gpt4 key购买 nike

在将核心数据并发调试标志设置为 1 来调试其他问题时,我注意到框架在上下文保存期间引发了一些异常。

我正在开发的应用程序大量使用后台线程和专用队列上下文来从套接字获取数据并在后台执行繁重的任务。

问题是,当我在没有 -com.apple.CoreData.ConcurrencyDebug 1 环境变量的情况下运行应用程序时,我不会从 try context.save( )

例如,我设置了 -com.apple.CoreData.ConcurrencyDebug 1,然后执行一个操作来执行某些操作并保存它。

  do {
try context.save()
} catch {
log.error("Delete error: \(error)")
}

我在 try context.save() 上遇到 乐观锁定失败 异常

然后我继续将应用程序返回到触发异常的相同状态,并在不使用 -com.apple.CoreData.ConcurrencyDebug 1 和设置的情况下运行它断点

  do {
try context.save()
} catch {
log.error("Delete error: \(error)") // <--- breakpoint here
}

与我过去遇到的其他问题不同,没有任何错误。我不知道锁定原因是什么。可能有很多事情出了问题,但我不知道是哪一件事在这个机会中把事情搞砸了。

我在谷歌上进行了广泛的搜索,但没有太多关于如何从乐观锁异常中获取有意义的信息的详细信息。

最佳答案

使用 NSPersistentContainer 时,请交叉所有 T:

  • 在您的所有项目中搜索对 viewContext 的引用。确保仅在主线程上调用
  • 谨防 NSManagedObject“实用程序”扩展。通往 hell 的道路是由善意铺成的。扩展 NSManagedObject 时,如果需要,请始终引用 self.managementObjectContext
  • 在线程密集型应用程序中,从 mainContext 读取,在后台上下文中写入。要有耐心,不要过度更新/刷新/查询 viewContext 以获得 UI 上的更多更新。不要脏读。
  • 谨防 NSFetchRequestController 回调上的“refreshFoo”/“calculateBar”调用。让数据流向您的应用程序的 UI。别拉它。

关于iOS Core Data 乐观锁失败误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55711385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com