我有一个问题,我非常有信心从广义上知道它是什么以及如何解决它,但我不确定并且还没有找到实施解决方案的干净/最佳实践方法是什么.
我的问题:我正在使用 dispatch_async 在后台线程中将文件中的一些数据加载到我的核心数据模型中,除非我在 GUI 中执行也会影响模型然后爆炸的事情,否则它工作正常,例如:
'NSGenericException', reason: '*** Collection ... was mutated while being enumerated.'
...我认为这是由于两个线程弄乱了同一个 ManagedObjectContext 中的数据,因为我目前只使用一个。
我读过的所有文章和答案都告诉我,我应该为后台线程使用单独的 ManagedObjectContext,但是如何/在哪里设置它?
我目前在我的 App Delegate 中创建我的 PersistentStoreCoordinator 和(一个)ManagedObjectContext,并将 ManagedObjectContext 传递给我的(唯一)View Coordinator。它又将其传递给后台数据加载任务(这是我的模型类之一的类方法),从而导致了问题。
我是不是该
- 把PersistentStoreCoordinator传给ViewController,这样它又可以把它传给后台任务,这样后台任务就可以创建自己的本地ManagedObjectContext了?
- 在 App Delegate 中创建一个 ManagedObjectContexts 池并将它们全部传递给 View Controller,以便它可以自己使用一个并将其他人交给后台任务?
- 完全不同的东西?