我正在使用这个具有timeStamp属性的实体,该属性恰好是Date类型
当我尝试按日期执行搜索时出现问题:
NSDate *today = [NSDate date];
NSDate *end_day = [today dateByAddingTimeInterval: -5*one_day]; // the last 5 days
result = [helper fetchObjectsForEntityName:@"MyEntity" withPredicate:
[NSPredicate predicateWithFormat:@"timestamp > %f", [end_day ] ]];
当我打印出谓词的值时,我得到的就是:
timestamp > CAST(378132723.717909, "NSDate")
但是当语句执行时,它会崩溃。 我在代码的其他部分使用相同的方法,它没有任何问题,并且 很明显,如果我删除NSPredicate,它又有效。
对于这个问题,这里还有 fetchObjectsForEnittyName的代码:WithPredicate:
- (NSSet *)fetchObjectsForEntityName:(NSString *)newEntityName
withPredicate:(id)stringOrPredicate, ...
{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:newEntityName];
if (stringOrPredicate)
{
NSPredicate *predicate;
if ([stringOrPredicate isKindOfClass:[NSString class]])
{
va_list variadicArguments;
va_start(variadicArguments, stringOrPredicate);
predicate = [NSPredicate predicateWithFormat:stringOrPredicate
arguments:variadicArguments];
va_end(variadicArguments);
} else {
NSAssert2([stringOrPredicate isKindOfClass:[NSPredicate class]],
@"Second parameter passed to %s is of unexpected class %@",
sel_getName(_cmd), @"Whatevah");
predicate = (NSPredicate *)stringOrPredicate;
}
[request setPredicate:predicate];
}
NSError *error = nil;
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
if (error != nil)
{
[NSException raise:NSGenericException format:[error description]];
}
return [NSSet setWithArray:results];
}
有没有人知道这个问题可能是什么?
答案 0 :(得分:0)
首先,你要将对象与标量进行比较,并有一些额外的括号,请尝试这样做:
[NSPredicate predicateWithFormat:@"timestamp > %@", end_day];
要尝试的第二件事是属性的格式说明符,如:
[NSPredicate predicateWithFormat:@"%K > %@", @"timestamp", end_day];
答案 1 :(得分:0)
问题似乎是最简单的答案。
我正在使用
[NSPredicate predicateWithFormat:@"timestamp > %@", end_day];
没有大写字母S,就像我的实体所描述的那样! 所以应该是
[NSPredicate predicateWithFormat:@"timeStamp > %@", end_day];
案件解决了。