1

從Core Data獲取元素與FetchResultController或ManagedObjectContext之間的區別?使用FetchResultController和ManagedObjectContext獲取對象之間的差異

1)FetchResultController

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext: managedObjectContext]]; 

NSSortDescriptor *sortDescriptorNameAscending = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorNameAscending,nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptorNameAscending release]; 

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Lists"]; 

2)ManagedObjectContext

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext]]; 
NSError *error = nil; 
NSArray *items = [ managedObjectContext executeFetchRequest:request error:&error]; 

回答

1

與使用NSFetchedResultsController而不僅僅是NSFetchRequest相比,監控您的數據和使用部分時的便捷方法。

僅處理NSFetchRequest時,您必須自行確定這些部分,並且在發生某些變化時您需要重新提取數據。

處理NSFetchedResultsController時,它將確定您的部分,緩存結果(對該數據進行第二次請求即時),併爲您的NSTableView提供便利方法。最後,當您的數據發生變化時,NSFetchedResultsController將通過其代表通知您。

這兩個內部的數據將會是相同的。它正在管理數據的狀態,這是不同之處。

+0

謝謝你! – wal 2010-03-31 15:30:44

0

NSFetchedResultsController對象會告訴你,當你的查詢變化的對象。只需提供一個委託對象來接收呼叫(請參閱NSFetchedResultsControllerDelegate協議的文檔)。 它還爲您提供部分管理,如果您想要在表格視圖中顯示數據,那麼該部分管理非常有用。

+0

謝謝。但是這兩個方法返回的數組是相同的,不是嗎?問題是關於它:關於回報的差異。我詢問後我進行了測試,我認爲是。 – wal 2010-03-31 13:13:36

相關問題