相关疑难解决方法(0)

核心数据嵌套的托管对象上下文和频繁的死锁/冻结

我有一个问题几乎与此人描述的问题相同,但它没有得到答案:

http://www.cocoabuilder.com/archive/cocoa/312683-core-data-nested-managed-object-contexts-and-frequent-deadlocks.html#312683

这是问题所在:

我有一个使用NSPrivateQueueConcurrencyType和持久性存储协调器集的父MOC设置,它有一个带有NSMainQueueConcurrencyType的子MOC设置.大多数长期努力工作和保存的想法可以在私有MOC上完成,从而使主线程阻止UI.不幸的是,我似乎遇到了导致死锁的几种情况.

如果子MOC(在主线程上)正在使用NSFetchedResultsController执行提取,则会向父上下文发送-executeFetchRequest:它可以创建死锁.这两个操作都是在performBlock的上下文中完成的:对于它们各自的MOC,尽管文档似乎表明在没有performBlock的主线程上使用主线程并发类型MOC是好的.

看起来私有队列正在等待主线程上的子上下文已经锁定的PSC锁.看起来子上下文(在持有PSC锁定时)试图将dispatch_sync分配给父上下文,因此它们都在等待彼此.

是PriveQueue - > MainQueue是支持的配置吗?似乎大多数人仍然在主线程上有父上下文.

主线程看起来像这样:

> #0    0x960f6c5e in semaphore_wait_trap ()
> #1    0x04956bb5 in _dispatch_thread_semaphore_wait ()
> #2    0x04955c8f in _dispatch_barrier_sync_f_slow ()
> #3    0x04955dea in dispatch_barrier_sync_f ()
> #4    0x01797de5 in _perform ()
> #5    0x01798547 in -[NSManagedObjectContext(_NestedContextSupport) newValuesForObjectWithID:withContext:error:] ()
> #6    0x0176416b in _PFFaultHandlerLookupRow ()
> #7    0x01763f97 in -[NSFaultHandler fulfillFault:withContext:forIndex:] ()
> #8    0x01763b75 in _PF_FulfillDeferredFault ()
> #9    0x017639f2 in _sharedIMPL_pvfk_core ()
> #10    0x017681a0 in _pvfk_11 ()
> …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c nsfetchedresultscontroller nsmanagedobjectcontext ios

30
推荐指数
1
解决办法
1万
查看次数