【问题标题】:Use block with NSManagedObjectContext [duplicate]将块与 NSManagedObjectContext 一起使用 [重复]
【发布时间】: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。

我的问题是:

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

更新

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 2017-08-16
      • 2011-01-13
      • 2017-06-21
      • 2018-11-18
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多