我有一个具有名为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”。 –