Ios 当用户登录时,从队列处理块执行(将图像保存在核心数据中的块)

Ios 当用户登录时,从队列处理块执行(将图像保存在核心数据中的块),ios,objective-c,core-data,grand-central-dispatch,Ios,Objective C,Core Data,Grand Central Dispatch,这就是我在项目中所做的 用户确实使用facebook登录,一旦成功登录,应用程序将开始从后台队列中的服务器下载所有图像。我已经将图像保存到块中的核心数据,并将块提交到后台队列,这样主线程就不会被阻塞 问题: 一旦用户登录,他就会进入设置屏幕,从应用程序中注销。此时,队列中可能有块,它们将执行将图像保存到核心数据的操作。我的应用程序因未捕获的异常而崩溃*因未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法从此NSManagedObjectContext

这就是我在项目中所做的 用户确实使用facebook登录,一旦成功登录,应用程序将开始从后台队列中的服务器下载所有图像。我已经将图像保存到块中的核心数据,并将块提交到后台队列,这样主线程就不会被阻塞

问题: 一旦用户登录,他就会进入设置屏幕,从应用程序中注销。此时,队列中可能有块,它们将执行将图像保存到核心数据的操作。我的应用程序因未捕获的异常而崩溃*因未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法从此NSManagedObjectContext的协调器访问对象的持久存储。”

当我注销时,我清除应用程序的持久存储和协调器。这些是应用程序的全局对象。但我不知道为什么会发生这种崩溃


谢谢

此问题已解决。这个问题是由于用户点击退出时清除了应用程序的存储。当它被清除时,队列中可能有一些BLCOK仍在执行,当它们试图将图像保存到核心数据时,应用程序就会崩溃。现在我已经修复了这个问题,将清除存储添加为块的一部分并提交到同一队列,以便在所有块从队列中结束后清除存储。

是否同时取消所有挂起的加载?因为块被提交到队列以获取图像并保存到核心数据中,如何取消或停止执行这些块?您应该使用操作队列和/或让这些块检查是否应继续操作(如检查当前用户和登录状态)。准确地说as@Wain表示,使用原子属性,您的块可以首先检查单个ivar标志(isCancelled)或用户状态,以了解是否进行工作。