核心数据:保存结束时冻结

时间:2012-06-17 03:04:43

标签: objective-c ios multithreading core-data ios5

我目前有一个带有标签栏的iPhone项目。在标签栏上有两个视图。两个视图都将数据加载或保存到Core Data数据库(这两个视图都启动了一个从Web服务收集数据并将其保存在数据库中的方法)。加载视图时,它会从填充视图中的表的数据库加载数据。如果我运行应用程序并单击选项卡栏中的第二个视图,则第一个视图仍然从Web服务加载数据并将其插入单独线程的数据库中。这很好,但是一旦第一个视图完成从webservice将所有数据加载到数据库中,它就会冻结两个视图控制器,如果第二个视图控制器正在从数据库加载数据。

控制台没有错误,xcode没有指出存在任何错误。我的所有进程都在不同的线程上工作,因此主线程冻结没有问题。从Web服务中提取数据并将其保存到数据库是一种方法,在方法结束时我放置了NSLog(@"View Controller 1 Save Complete")。一旦调用它并且第二个视图控制器仍在加载数据,它就会冻结。整个应用程序没有响应(没有任何作用)。

我查看了其他SO问题的信息,并建议我在每次获取或插入时声明一个新的NSManagedObjectContext,我已经这样做但是它没有解决问题。

如果有人知道发生了什么或者您想了解更多信息,请告诉我。

编辑: 我正在使用Xcode 4.5和IOS 6模拟器。这是一周前发布的新IOS的beta版本。我知道这不是错误,因为我在开始使用测试版之前遇到了这个问题。

1 个答案:

答案 0 :(得分:3)

我过去遇到的一种可能性是尝试在线程上与MOC进行交互,该线程与创建的线程不同。如果您尝试进行并发操作,就会发生这种情况,并且在与MOC交谈时,您必须非常小心地知道您所处的线程。例如,对于异步事物,您的回调可能在不同的线程上执行(即主要线程上发生了viewDidLoad,因此如果您在那里创建MOC,则以后不能在其他线程中使用它)。