我有一個具有名爲date
的屬性的(SQL)代碼數據實體。我建立一個謂語和讀取請求,並宣佈一個數組來保存結果如下如何在一系列日期中使用謂詞
NSDate *firstDate = <date1>;
NSDate *lastDate = <date2>;
NSArray *dates = [NSArray arrayWithObjects: firstDate, lastDate, nil];
NSPredicate *myPredicate = [NSPredicate predicateWithFormat:
@"date BETWEEN %@", dates];
NSFetchRequest * req = [NSFetchRequest fetchRequestWithEntityName:@"myEntity"];
NSArray * results;
以下工作
results = [managedObjectContext executeFetchRequest:req error:nil];
// gets all records
results = [results filteredArrayUsingPredicate:myPredicate];
// results now has the records I wanted
但是下面沒有
req.predicate = myPredicate;
NSArray * results = [managedObjectContext executeFetchRequest:req error:nil];
這控制檯
- [__ NSTaggedDate constantValue]:發送給無法識別的選擇器實例...
這似乎是錯誤的,必須檢索所有記錄,然後過濾它們。爲什麼謂詞不能與提取請求一起工作?這是SQLite的限制嗎?我知道日期被存儲爲NSTimeInterval
s(即雙打),並且已經在謂詞中嘗試了這些,但是類似的問題。
可能重複的[NSPredicate BETWEEN用的NSDate原因 - \ [__的NSDate constantValue \]:無法識別的選擇發送到實例0x1e7ff0](http://stackoverflow.com/questions/5268272/ nspredicate-with-nsdate-causes-nsdate-constantvalue-unrecognized -s) –
非常感謝提示,儘管我仍然不明白原因。將BETWEEN分解爲單獨的子種族適用於我。 – AlexT
我已經提供了一個爲什麼會崩潰的答案。這就是說,在使用核心數據時,你仍然不能使用「BETWEEN」。 –