2013-05-10 119 views
0

我的核心數據模式中有三個實體,分別爲AB,C。每個日期都有一個createdAt來自不同實體核心數據屬性的最大值

無論實體類型如何,訪問最近的createdAt日期的最快方法是什麼?我可以這樣做:

(注:fetchobjects ...是運行執行請求的只是速記方法)

NSArray *allAs = [context fetchObjectsForEntityName:@"A"]; 
NSArray *allBs = [context fetchObjectsForEntityName:@"B"]; 
NSArray *allCs = [context fetchObjectsForEntityName:@"C"]; 

NSArray *allObjects = [[allAs arrayByAddingObjectsFromArray:allBs] arrayByAddingObjectsFromArray: allCs] 

NSDate *latestDate = [allObjects valueForKeyPath:@"@max.createdAt"]; 

或者這被認爲是危險的(因爲我依靠的名字該屬性在不同的實體中是相同的)。

回答

1

第一步可以優化。相反,獲取每個實體的所有的對象,只獲取(每個實體)最近createAt值:

  • 添加排序描述符的排序由createdAt降讀取請求時,
  • 設置fetchLimit到1,
  • 設置resultTypeNSDictionaryType
  • 設置propertiesToFetch@[@"createdAt"]

的優點是,按日期排序基於SQLite的水平上進行的,而不是加載的所有對象的管理對象上下文和發射故障得到createdAt屬性,所以這應該是更快,更少的內存密集型。

allObjects數組然後將只包含3個詞典(每個實體一個)。

+0

整潔,謝謝 - 我不知道propertiesToFetch。 – 2013-05-10 16:28:42

相關問題