我有一个在后台运行的刷新过程(只使用performInBackground),其中一部分有db更新,所以我有一个单独的MOC用于后台线程。然后我使用didSave通知将更改合并到主MOC中。当应用程序在后台刷新时,用户可以单击UI。
大部分都有效,但我偶尔会看到一些锁。当我查看锁定之前调用的方法时,它会访问主MOC。我的刷新过程中没有任何东西可以访问它,一切都访问后台MOC。但是,我在想我对后台MOC所做的更改会使用didSave通知进行合并。如果我在执行mergeChangesFromContextDidSaveNotification时尝试查询一个MOC,那会是问题吗?最好的方法是什么?我以为我已经用我的后台线程单独的MOC解决了我的数据库问题,但合并将是一个问题吧?
答案 0 :(得分:1)
你走在正确的轨道上。每个线程都使用自己的MOC;当后台线程更新数据时,主UI线程获取通知。您描述的内容中没有任何内容可以导致锁定。您遇到的锁很可能是在主线程中执行长时间运行的代码阻塞UI的结果,而您认为此处理是在后台线程中完成的。