0

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

我的问题是:

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

更新

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

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

1 回答 1

0

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

于 2013-04-07T18:04:31.510 回答