我想要的是:
我尝试了'一切',但事实证明,Core Data在两个或多个线程和两个NSManagedObjectContexts以及绑定和具有关系的实体等方面存在太多困难。这些线程可以使CoreData非常复杂。
尽管如此,我想使用Core Data,我希望它能在后台运行以获得良好的UI响应。
所以我想知道,是否可以在一个单独的线程中完全运行与Core Data相关的所有内容,这不是主线程?
如果我终于找到一个有效的解决方案,我会给大家50块钱......
答案 0 :(得分:1)
我使用两个NSManagedObjectContext实例将一些持续时间较长的数据任务推送到另一个使用Grand Central Dispatch的线程上。
只要您小心将此上下文与用于获取数据的主线程上的上下文合并,那么您应该能够以这种方式获得一些性能。
答案 1 :(得分:0)
我不确定这是否可以帮助您,但也许您可以创建一个新的NSOperationQueue并在后台添加您需要的任何核心数据功能。因此,在您的类中有一个属性为NSOperationQueue,然后在-viewDidLoad方法中创建一个新属性: myOperationQueue = [NSOperationQueue new];每当你想要做一个操作,你可以将它添加到队列中,我相信它将在一个单独的线程上执行(self.myOperationQueue addOperation:someFunction),如果你想与主线程交互,那么调用assert([NSThread] isMainThread])在方法调用的开头。我以不同的方式使用Core Data和线程,但是从第二个线程我可以创建一个创建NSManagedObject的临时对象。