4

從iOS 5開始,CoreData引入了自己的private queue,您可以在其中運行一些操作(especially save context)在後臺運行。CoreData - 如何使用NSPrivateQueueConcurrencyType執行臨時上下文的NSFetchRequest?

這必須通過[context performBlock:...]完成。

這對saving the context很容易。但是,如何爲NSFetchRequest?我的意思是,如果我想獲取某些內容並希望在後臺獲取內容,該怎麼辦?我認爲[context performBlock ..]不能實現這一點。

這裏還有一個新的方法嗎?

回答

4

任何涉及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 
    }]; 
}]; 
+0

謝謝。如果我想要後臺獲取nsresultscontroller並讓其被主UI使用,該怎麼辦? –

相關問題