我有一個帶有日期字段的實體,我想選擇給定年份的記錄。如何爲工作建立NSPredicate?在覈心數據沒有找到有關日期函數的任何東西(如果有的話)NSPredicate只在日期字段的「年份」部分進行過濾
感謝
我有一個帶有日期字段的實體,我想選擇給定年份的記錄。如何爲工作建立NSPredicate?在覈心數據沒有找到有關日期函數的任何東西(如果有的話)NSPredicate只在日期字段的「年份」部分進行過濾
感謝
一種可能的方法:
步驟1)請參閱從蘋果的「日期和時間編程「創建從組件有個約會」指南。」使NSDate代表年份的開始,並且NSDate代表年份的結尾。
步驟2)然後,您可以構建一個謂詞,用於搜索日期attrs大於第一個日期但小於最後日期的對象。
謂詞將是這個樣子:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@「(inceptionDate > %@) AND (inceptionDate < %@)」, dateBeginYear, dateEndYear];
最後我也被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]]; }
對NSDate的演員幫我做了一些小技巧,謝謝! – 2013-06-06 08:50:30
事實上我只是想類似的東西,它是工作,但羅格的想法似乎更清潔 – kindoblue 2011-03-19 23:56:52
與以往一樣,有對於每一個問題總是一個乾淨,漂亮,優雅的解決方案,但它是錯誤的:-) Rog建議的想法不可能遵循:基於瞬態屬性的謂詞不能成爲 – kindoblue 2011-03-20 14:09:34
@kindoblue:感謝您發佈完整的雜技回答。我把它捲起來作爲參考。我想知道你是否還不能用瞬態attr做一些事情,在你使用獲取進行的所有工作中設置它,之後的瞬態數據可以很容易地處理緩存對象的日期信息。 – Wienke 2011-03-20 21:45:17