0

我有一个(SQL)代码数据实体,其属性名为date. 我构造一个谓词并获取请求,并声明一个数组来保存结果,如下所示

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]:无法识别的选择器发送到实例...

必须检索所有记录然后过滤它们似乎是错误的。为什么谓词不能与 fetch 请求一起使用?这是 SQLite 限制吗?我知道日期存储为NSTimeIntervals (即双打),并在谓词中尝试了这些,但类似的问题。

4

2 回答 2

1

也许这就是你要找的..

datePredicate = [NSPredicate predicateWithFormat:@"(%@ <= date && date <= %@)", endDate, startDate];

并且 endDate 和 startDate 是 NSDate

于 2012-09-19T13:18:03.613 回答
-1

崩溃的原因是数组中的东西不应该是NSDate实例。应该是NSExpression对象,其constantValueNSDate. 聚合表达式的文档说明了这一点:

聚合表达式允许您创建包含表达式的谓词,这些表达式评估为包含更多表达式的集合。

所以你的收藏必须包含表达式,而不是日期。

于 2012-09-17T13:13:54.367 回答