Coredata NSPredicate按日期

时间:2011-04-24 05:27:42

标签: ios4

我正在使用XCode 4& IOS 4.3

LastWorn是coredata模型中的Date属性。 在目标C类中,LastWorn是一个NSDate。 使用objective-c我可以设置和获取coredata数据库的日期ok。 btnSearchOperator包含>或者< datePicker.date是UIDatePicker

的当前选定值

我正在尝试使用谓词中的LastWorn日期搜索coredata数据库。 从构建NSPredicate的代码中提取以查询数据

... code not shown ...
if ([txtSearchDate.text length] > 0 )
{
    if ([predicate length] != 0) {
        [predicate appendString:@" AND "];
    }
    [predicate appendFormat:@"LastWorn %@ %@", [btnSearchOperator currentTitle], datePickerView.date];        
}

以上代码附加'LastWorn> 2011-04-20 14:00:00 +0000'到谓词并崩溃。

控制台日志 2011-04-23 22:34:17.805 iDresser [1216:207] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无法解析格式字符串“Type.Id == 0 AND Shopping == NO AND(LastWorn> 2011-04-20 14:00:00 +0000)“'

如果我使用F-Script CoreData浏览器工具并构建测试查询,“LastWorn!= nil”会显示正确的结果。

如果我查询“LastWorn> 2011-01”,它显示与LastWorn!= nil相同且不正确。

如果我查询“LastWorn> 2011”,我会收到“NSInvalidArgumentException: - [NSCFNumber timeIntervalSinceReferenceDate]:无法识别的选择器发送到实例0x20048a920”

我只想查找LastWorn日期小于指定值的所有项目? 任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,你需要使用以下方法构建你的谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"LastWorn %@ %@", [btnSearchOperator currentTitle], datePickerView.date]

如果您在字符串中构建谓词然后将其设置为谓词

,则会失败
相关问题