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