0

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

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

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

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

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

4

1 回答 1

3

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

于 2012-06-17T07:34:42.497 回答