我希望将块与 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。