Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用app'在核心数据中保存图像;s默认全局队列导致冻结?_Ios_Objective C_Core Data_Grand Central Dispatch_Dispatch Async - Fatal编程技术网

Ios 使用app'在核心数据中保存图像;s默认全局队列导致冻结?

Ios 使用app'在核心数据中保存图像;s默认全局队列导致冻结?,ios,objective-c,core-data,grand-central-dispatch,dispatch-async,Ios,Objective C,Core Data,Grand Central Dispatch,Dispatch Async,我正在开发一个应用程序,该应用程序可以从facebook获取图像。我正在使用核心数据来保存图像。我使用dispatch\u asyc功能将图像保存在核心数据中。我用 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0) 保存图像以便我的主线程不会阻塞 但有时我观察到应用程序冻结,没有响应。我使用同样的方法将图像保存到应用程序中不同位置的核心数据中,比如如果用户转到已签名的用户配置文件,则应

我正在开发一个应用程序,该应用程序可以从facebook获取图像。我正在使用核心数据来保存图像。我使用
dispatch\u asyc
功能将图像保存在核心数据中。我用

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)
保存图像以便我的主线程不会阻塞

但有时我观察到应用程序冻结,没有响应。我使用同样的方法将图像保存到应用程序中不同位置的核心数据中,比如如果用户转到已签名的用户配置文件,则应用程序将以同样的方式保存他的相册照片。此外,如果用户进入任何图像的全屏,它将开始以相同的方式获取评论、喜欢和保存

若我使用一个私有队列并使用它进行保存,那个么应用程序不会冻结

由于我在应用程序中的许多地方使用全局队列,这是应用程序冻结的原因吗


谢谢。

您确实应该阅读《核心数据编程指南》中有关并发性的部分。听起来您正在访问创建managedObjectContext的线程之外的managedObjectContext,这是非法的。您最好使用带有performBlock的子上下文来执行此任务。大概是这样的:

NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setParentContext:parentContext];
[context performBlock:^{
   //Save image
}];

这个问题已经解决了。问题是多线程访问主上下文,因此应用程序将进入冻结状态。现在这个问题已经解决。

不,我没有访问不同线程的上下文。是否与全局并发队列有关?您是否在该全局队列上创建NSManagedObjectContext的实例,并且仅从该并发队列中引用属于该实例的对象?是的,我的所有上下文都是使用相同的全局队列创建的。这是CEarwood的回答