将块与 NSManagedObjectContext 一起使用 [重复]

Posted

技术标签:

【中文标题】将块与 NSManagedObjectContext 一起使用 [重复]【英文标题】:Use block with NSManagedObjectContext [duplicate] 【发布时间】:2013-04-07 17:30:20 【问题描述】:

我希望将块与 NSManagedObjectContext 一起使用。我正在尝试为一个实体异步下载多个图像。我拥有的数据结构或多或少类似于以下内容(这是伪代码,并不完全遵循 NSManagedObject 语法)。

@interface SAImageDoc : NSObject

@property(nonatomic, strong) NSString* imageUrl1;
@property(readwrite) BOOL imageUrl1Downloaded; 
@property(nonatomic, strong) NSString* imageUrl2;
@property(readwrite) BOOL imageUrl2Downloaded; 

@end

我正在尝试使用块(AFNetworking)异步下载图像。图像下载后,我想将下载的布尔值更新为 YES 并将其保存到 CoreData。

我的问题是:

    是否可以将 NSManagedObjectContext 传递给每个块?由于该块在不同的线程中执行,并且 NSManagedObjectContext 不是线程安全的,因此这样做似乎是错误的。 任何建议如何处理这个?如果 1 不起作用。有什么已知的例子吗?

更新

鉴于 Gabriele、Mario 的回答和引用 What is NSManagedObjectContext's performBlock: used for?,我相信这就是我要做的:

    使用 NSPrivateQueueConcurrencyType 或 NSMainQueueConcurrencyType 实例化上下文; 在每个块中,调用上下文 performBlock。

【问题讨论】:

【参考方案1】:

为了简单地回答您的问题,您可以将上下文传递给您的下载块并在其中 使用上下文的 -performBlock: 方法来访问上下文。

【讨论】:

以上是关于将块与 NSManagedObjectContext 一起使用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

何时在 CSS 中使用边距与内边距 [关闭]

ORA 01114 - 将块写入文件的 IO 错误

将块传递给延迟作业

代码块与静态代码块与静态方法的加载顺序

xml 将块移动到其他容器: - Magento 2

如何将块压缩行转换为密集矩阵?