【发布时间】:2012-06-17 03:04:42
【问题描述】:
我目前有一个带有标签栏的 iPhone 项目。在标签栏上有两个视图。两个视图都将数据加载或保存到 Core Data 数据库(这两个视图都启动了一个从 Web 服务收集数据并将其保存在数据库中的方法)。加载视图时,它会从填充视图中的表的数据库中加载数据。如果我运行应用程序并单击选项卡栏中的第二个视图,则第一个视图仍在从 Web 服务加载数据并将其插入到单独线程上的数据库中。这很好,但是一旦第一个视图完成将所有数据从 web 服务加载到数据库中,只有当第二个视图控制器正在从数据库加载数据时,它才会冻结两个视图控制器。
控制台没有错误,xcode 也没有指示有任何错误。我所有的进程都在不同的线程上工作,所以主线程冻结没有问题。从 web 服务中提取数据并将其保存到数据库是一种方法,在方法的末尾我放了NSLog(@"View Controller 1 Save Complete")。一旦调用它并且第二个视图控制器仍在加载数据,它就会冻结。整个应用程序没有响应(没有任何反应)。
我查看了有关其他 SO 问题的信息,它建议我在每次提取或插入时声明一个新的 NSManagedObjectContext,我已经这样做了,但它并没有解决问题。
如果有人知道发生了什么或者您想了解更多信息,请告诉我。
编辑: 我正在使用 Xcode 4.5 和 IOS 6 模拟器。这是一周前发布的新IOS的beta版。我知道这不是错误,因为我在开始使用 beta 版本之前就遇到了这个问题。
【问题讨论】:
-
请发布一些相关代码,包括您如何连接到网络服务。
-
@timthetoolman 我无法想象会有任何相关代码,因为这不是 Web 服务错误并且控制台中没有错误?
-
听起来您可能遇到了线程死锁。正如@timthetoolman 所说,我们需要查看一些代码以了解发生了什么。
-
@Sean 我不太确定我应该发布什么代码?我的项目中有 100 多个文件和数千行代码。
标签: objective-c ios multithreading core-data ios5