CoreData-如何使用NSPrivateQueueConcurrentType的临时上下文执行NSFetchRequ



自iOS 5以来,CoreData引入了自己的private queue,您可以让一些操作(especially save context)在后台运行。

这必须通过[context performBlock:...]完成。

对于saving the context来说,这是非常好的。但是,NSFetchRequest怎么样?我的意思是,如果我想拿一些东西,并希望在后台拿呢?我不认为[上下文性能Block..]能做到这一点。

有没有新的方法可以做到这一点?

任何涉及NSPrivateQueueConcurrencyTypeNSManagedObjectContext的内容都应该封装在performBlock块中。对于想要将托管对象传递回主队列上下文的后台获取,如下所示:(注意,这只是为了说明目的):

// assume self.managedObjectContext is a main queue context
NSManagedObjectContext *backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[backgroundContext performBlock:^{
    // do your fetch - e.g. executeFetchRequest
    NSManagedObjectID *objID = [someManagedObject objectID];
    [self.managedObjectContext performBlock:^{
        NSManagedObject *mainManagedObject = [self.managedObjectContext objectWithID:objID];
        //  do something now with this managed object in the main context
    }];
}];

最新更新