2012-01-09 50 views
1

我有一個使用核心數據(成功)的應用程序,我有一個對象圖,它有幾個根節點,每個根節點都有一對多到多達幾萬個孩子。在我的應用程序的運行,根據用戶的輸入,我做以下(僞):預先緩存核心數據的提取?

Find the user selected root node, 
Then fetch all its children, in ascending alphabetic order based on a property. 

這裏的訣竅是,這個數據是不變。我的核心數據存儲是隻讀的。

這樣做是非常耗時的。我如何預先緩存這些結果,以便完全避免抓取和存儲?獲取的結果用於填充UITableView。當用戶選擇該表格視圖的一個單元格時,它會鑽入Core Data存儲區中的更深層數據 - 該數據不需要預存。

回答

0

此代碼來自Core Data Programming指南(「核心數據性能 「),並演示如何進行預取。

NSManagedObjectContext *context = /* get the context */; 
NSEntityDescription *employeeEntity = [NSEntityDescription 
entityForName:@"Employee" inManagedObjectContext:context]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:employeeEntity]; 
[request setRelationshipKeyPathsForPrefetching: 
[NSArray arrayWithObject:@"department"]]; 

此外,還對使用真實獲取重建的內容使用限制。這將有助於表現。

1

如果你在你的tableview中使用NSFetchedResultsController,你可以設置一個cacheName。您可以在NSFetchRequest中設置一個batchSize以將結果分塊。並且確保您將排序的屬性設置爲核心數據模型中的索引。

+0

我從來沒有聽說過NSFetchedResultsController。謝謝! – Nektarios 2012-01-10 17:47:41