2011-03-19 69 views

回答

1

一種可能的方法:

步驟1)請參閱從蘋果的「日期和時間編程「創建從組件有個約會」指南。」使NSDate代表年份的開始,並且NSDate代表年份的結尾。

步驟2)然後,您可以構建一個謂詞,用於搜索日期attrs大於第一個日期但小於最後日期的對象。

謂詞將是這個樣子:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@「(inceptionDate > %@) AND (inceptionDate < %@)」, dateBeginYear, dateEndYear]; 
+0

事實上我只是想類似的東西,它是工作,但羅格的想法似乎更清潔 – kindoblue 2011-03-19 23:56:52

+1

與以往一樣,有對於每一個問題總是一個乾淨,漂亮,優雅的解決方案,但它是錯誤的:-) Rog建議的想法不可能遵循:基於瞬態屬性的謂詞不能成爲 – kindoblue 2011-03-20 14:09:34

+0

@kindoblue:感謝您發佈完整的雜技回答。我把它捲起來作爲參考。我想知道你是否還不能用瞬態attr做一些事情,在你使用獲取進行的所有工作中設置它,之後的瞬態數據可以很容易地處理緩存對象的日期信息。 – Wienke 2011-03-20 21:45:17

5

最後我也被Wienke或多或少的建議。要創建獲取記錄了某一年(或多個)謂詞,我不喜歡這樣的:

- (NSPredicate*) predicateFromYear:(NSInteger)start span:(NSInteger)aSpan { 
NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDateComponents *dc = [NSDateComponents new]; 

[dc setYear:start]; 

NSDate *startDate,*endDate; 

startDate = [cal dateFromComponents:dc]; 
[dc setYear:aSpan]; 
endDate = [cal 
      dateByAddingComponents:dc 
      toDate:startDate 
      options:0]; 

[dc release]; 
return [NSPredicate predicateWithFormat: 
     @"date >= CAST(%f, \"NSDate\") AND date < CAST(%f, \"NSDate\")", 
     [startDate timeIntervalSinceReferenceDate], 
     [endDate timeIntervalSinceReferenceDate]]; } 
+0

對NSDate的演員幫我做了一些小技巧,謝謝! – 2013-06-06 08:50:30

相關問題