4

iOS 5 以降、CoreData は、一部の操作 ( ) をバックグラウンドprivate queueで実行できる独自の機能を導入しています。especially save context

これは 経由で行う必要があります[context performBlock:...]

簡単でとても良いですsaving the context。しかし、どうNSFetchRequestですか?何かを取得したいときにバックグラウンドで取得したい場合はどうすればよいでしょうか? [context performBlock..] がこれを達成できるとは思わない。

そうするための新しい方法もありますか?

4

1 に答える 1

4

Anything that involves the NSManagedObjectContext of NSPrivateQueueConcurrencyType should be wrapped in a performBlock block. For background fetching where you want to pass managed objects back to the main queue's context, something like this: (note this is just for illustrative purposes):

// 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 に答える