2012-10-16 58 views
0

假設我有一個表中的一些NSDates:核心數據組的NSDate成月/年

  • 2012年1月11日
  • 2012年1月16日
  • 2012年2月14日
  • 2012/4/13
  • 2012年4月14日
  • 2012/4/18

我想組這些日期的月份和年份,這樣我得到:

  • 1/2012
  • 2/2012
  • 4/2012

我現在求助於取每條記錄該表在日期列上執行valueForKeyPath,提取NSDateComponents並將結果存儲在NSSet中。這似乎有點低效。

我想知道是否有辦法編寫一個NSPredicate,將這些日期分組到數據庫端。

+0

你有沒有從這個解決方案我現在有同樣的問題/ u能請建議我該怎麼做,我仍然不明白從接受amswer – ichanduu

回答

2

我做了類似的事情,我在名爲sortDate的實體中使用了一個額外的屬性。 我從我的自定義日期設置器中設置sortDate。

事情是這樣的:?

- (NSDate *)monthDateFromDate:(NSDate *)date { 
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date]; 
    NSDate *monthDate = [calendar dateFromComponents:components]; 
    return monthDate; 
} 

- (void)setDate:(NSDate *)date { 
    [self willChangeValueForKey:@"date"]; 
    [self setPrimitiveStartDate:date]; 
    [self didChangeValueForKey:@"date"]; 

    NSDate *sortDate = [self monthDateFromDate:date]; 
    [self willChangeValueForKey:@"sortDate"]; 
    [self setPrimitiveSortDate:sortDate]; 
    [self didChangeValueForKey:@"sortDate"]; 
} 
+0

的事那麼你是否將'sortDate'定義爲核心數據模型中的瞬態屬性? –

+0

它是保存在數據庫中的常規屬性。我希望這會使分區更快。根據我的經驗,NSDate計算非常昂貴。雖然我從來沒有分析過它,但我確信比較sqlite的TIMESTAMP值會更快,然後爲fetch中的每個對象計算一個新的NSDate。 –

+1

此解決方案的唯一問題是時區敏感性。即使您更改時區並將日期移至過去/未來,排序日期也將保持不變。 – Sulthan