为了验证我只在主线程中保存,我在调用的单个 MOC 保存方法中添加了一条日志语句。
在我的应用程序中,我决定,与其潜入管理和合并多个线程的两个核心数据 MOC,我可以只处理来自文件系统的文件信息并将这些非托管对象传递给主线程,其中该信息然后将用于将数据保存到托管对象。
MOC 通过 NSManagedObject 上的类别访问。在 MOC 上有调用 save 的块(ASIHTTPRequest 启动块),源声明它们总是在主线程上调用。
线程转储显示死锁信息为“__psynch_mutexwait + 26”,就在对 NSManagedObjectContext 的保存调用之后。
我觉得我可能误解了一些基本的东西.. :(
更多信息编辑:我调用 dispatch_get_main_queue() 来调用包含调用 NSManagedObjectContext 保存的函数。我认为因为它是在主线程上执行的,所以这应该没问题。
更多信息编辑:我可以通过滚动浏览经常被操作的 NSManagedObjects 的 NSFetchedResults 控制器的表视图来更快地触发死锁。在这种情况下,它锁定获取请求。
自我解决方案编辑:问题是我在两个线程上同时执行一个 FETCH 请求。我认为多线程阅读没问题的假设是错误的。