2012-03-31 64 views
1

我有一個名爲「Records」的實體,它有一個名爲NSDecimalNumber類的「量」的屬性。要檢索iOS Core Data中實體的一個屬性的值

當然「記錄」還有其他屬性,如「名稱」,「日期」等。

現在我需要獲取的所有的「記錄」來概括起來只有屬性,

,以獲得更好的性能我只是需要的「量」的價值,我不在乎名稱或日期。

那我該怎麼辦?

這是我的代碼,但我想他們不夠專業。

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"TransferRecord"]; 
request.includesSubentities = NO; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"amount"]]; 
// [request setReturnsObjectsAsFaults:NO]; // I don't know whether I shoud use this 
[request setResultType:NSDictionaryResultType]; 
NSError *error = nil; 
NSArray *temp = [self.fetchedResultsController.managedObjectContext executeFetchRequest:request error:&error]; 
if (temp) { 
//  NSDecimalNumber *allTrans = [NSDecimalNumber zero]; 
//  for (NSDecimalNumber *one in [temp valueForKey:<#(NSString *)#>) 
    NSLog(@"%@",[temp description]); 

而我不清楚「故障」是什麼意思。

回答

2

伊諾,

你怎麼知道的標準提取不適合您的需求不夠快?您是否使用工具將問題確定爲提取問題? (我問,因爲使CD應用運行得更快的標準方式,特別是在iOS上,通過使用更簡單的謂詞來獲取更多數據,然後使用對RAM中的項目進行設置操作來優化查詢。)

如果您認爲關於它,你會明白爲什麼。行存儲在磁盤上的連續字節中。這些行可以經常在同一個磁盤塊中找到。因此,單個提取可能會獲得很多行。磁盤讀取是任何數據庫查詢的緩慢部分。在iOS上,閃光燈非常慢。它不是爲高性能分散收集數據庫操作而設計的。 IOW,iOS設備不是,而SSD是它自己的操作系統。順便說一句,Flash上​​的提取會將128k-256k字節帶入緩衝區。因此,獲得更多的行很容易,而且相對較快。

上面的代碼基本上是正確的。

您需要閱讀有關Core Data故障的文檔。這是該系統的一個基本概念。蘋果的文檔對錯誤的性質非常清楚。堆棧溢出是要求在任何系統文檔中涵蓋的基本信息的錯誤地方。

Andrew

+0

非常感謝!這是......教學。 – 2012-04-02 14:33:32

+0

Eno,作爲新用戶,您可能不知道有一個協議接受答案。這有利於那些花時間回答你的問題的人。因此,如果您發現我的答案有用並且完整,那麼您是否請檢查我上面的答案旁邊的複選標記? (在我的回答開始時,它緊挨着上下箭頭。)安德魯 – adonoho 2012-04-03 14:19:23

相關問題