CoreData与GCD队列中的AFNetworking请求不兼容?

我正在使用GCD启动一个长期运行的后台进程('run_loop'),它创build一个NSManagedObjectContext('MOC'),监视CoreData对象,有时(准备好的时候)将它们的序列化上传到一个Web服务器,然后删除它们。

我正在使用AFNetworking进行HTTP调用。 问题在于请求完成处理程序块,因为这些块在不同的线程中运行,而不是由CoreData支持的MOC所有者。

我已经尝试从GCD run_loop块的开始存储NSThread,并使用performSelector:onThread:run_thread,但这似乎并没有真正调用select器。

我曾尝试使用dispatch_sync(run_queue),但这并不保证线程是一样的,只有GCD队列。 主线程中保存的另一个MOC稍后挂起。

最终,唯一有效的工作是在完成callback处理程序中设置布尔值,并引入额外的逻辑来检测布尔开关,并从主run_loop执行MOC工作。

任何人都可以build议一个更优雅的修复? 或者CoreData与从GCD队列启动的AFNetworking请求不兼容,我应该从头看一下低级的线程控制?

嗯..推荐的处理MOC和线程的方法是始终创build一个新的MOC,它是主线程MOC的一个子moc。 让主线程完成所有的保存,但是你的GCD线程基本上可以将更改合并到主MOC中。

我使用https://github.com/magicalpanda/MagicalRecord/取得了相当不错的成功,以更简单的方式实现这一点。