4

从 iOS 5 开始,CoreData 引入了自己的private queue功能,您可以在其中让一些操作 ( especially save context) 在后台运行。

这必须通过[context performBlock:...].

这很容易对saving the context. 但是, for怎么样NSFetchRequest?我的意思是如果我想获取一些东西并希望在后台获取呢?我不认为 [context performBlock..] 可以做到这一点。

是否还有一种新的方法可以做到这一点?

4

1 回答 1

4

任何涉及NSManagedObjectContextof 的东西NSPrivateQueueConcurrencyType都应该包装在一个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
    }];
}];
于 2012-09-12T00:20:47.400 回答