我有一个(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]:发送到实例的无法识别的选择器...
必须检索所有记录然后过滤它们似乎是错误的。为什么谓词不能用于获取请求?这是一个SQLite限制吗?我知道日期存储为NSTimeInterval
s(即双打)并且在谓词中尝试了这些,但是类似的问题。
答案 0 :(得分:1)
也许这就是你要找的......
datePredicate = [NSPredicate predicateWithFormat:@“(%@&lt; = date&amp;&amp; date&lt; =%@)”,endDate,startDate];
和endDate和startDate是NSDate
答案 1 :(得分:-1)
这是崩溃的原因是因为数组中的内容不应该是NSDate
个实例。应该是NSExpression
constantValue
为NSDate
的{{1}}个对象。 documentation for aggregate expressions says this:
聚合表达式允许您创建包含表达式的谓词,这些表达式计算为包含更多表达式的集合。
所以你的集合必须包含表达式,而不是日期。