【发布时间】:2013-05-05 03:36:14
【问题描述】:
这就是我在项目中所做的事情 用户确实使用 facebook 登录,一旦成功登录,应用程序就会开始从后台队列中的服务器下载所有图像。我已经将图像的保存写入一个块中的核心数据并将该块提交到后台队列,这样主线程就不会被阻塞。
问题: 用户登录后,他会转到设置屏幕,然后退出应用程序。此时队列中可能有块,它们将执行将图像保存到核心数据。我的应用程序由于未捕获的异常而崩溃* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法从此 NSManagedObjectContext 的协调器访问对象的持久存储。
当我注销时,我会清除应用程序的持久性存储和协调器。这些是应用程序的全局对象。但我不确定为什么会发生这种崩溃?
谢谢
【问题讨论】:
-
您是否同时取消所有挂起的加载?
-
既然blocks被提交到queue来获取图片并保存到core data中,那么这些blocks如何被取消或者停止执行呢?
-
您应该使用操作队列和/或让块检查它们是否应该继续操作(例如检查当前用户和登录状态)。
-
正如@Wain 所说,使用原子属性,您的块可以首先检查单个 ivar 标志 (isCancelled) 或用户状态以了解是否工作。
标签: ios objective-c core-data grand-central-dispatch