0

我有一个在后台运行的刷新过程(只使用 performInBackground 就可以了),其中一部分有数据库更新,所以我有一个单独的 MOC 用于后台线程。然后我使用 didSave 通知将更改合并到主 MOC。当应用程序在后台刷新时,用户可以在 UI 周围单击。

大多数情况下都有效,但我时不时地看到一些锁。当我查看锁之前调用的方法时,它访问了主 MOC。我的刷新过程中没有任何东西可以访问它,所有东西都可以访问后台 MOC。但是,我在想我对后台 MOC 所做的更改确实会使用 didSave 通知合并。如果我在执行 mergeChangesFromContextDidSaveNotification 时尝试查询一个 MOC,那会是问题吗?解决这个问题的最佳方法是什么?我以为我已经用一个单独的 MOC 为我的后台线程解决了我的数据库问题,但是合并将是一个问题,对吧?

4

1 回答 1

1

你在正确的轨道上。每个线程使用自己的 MOC;当后台线程更新数据时,主 UI 线程会收到通知。您所描述的内容中没有任何内容会导致锁定。您遇到的锁定很可能是由于在主线程中执行长时间运行的代码,阻塞了 UI,而您认为此处理是在后台线程中完成的。

于 2013-10-16T00:48:54.107 回答