将块与 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 一起使用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章