使用带有NSManagedObjectContext的块

时间:2013-04-07 17:30:21

标签: objective-c core-data asynchronous block nsmanagedobjectcontext

我正在寻找使用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不起作用。任何已知的例子?
  3. 更新

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

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

1 个答案:

答案 0 :(得分:0)

要简单回答您的问题,您可以将上下文传递给下载区块 使用context的-performBlock:方法来访问上下文。