我正在尝试创建一个NSPredicate
和NSDate
s来查询我的核心数据db。我在一个方法中形成一个名为filterString
的NSMutableString
的谓词。 queryCount
是一个NSInteger
,用于跟踪追加了多少个查询。在下面的块,start
和end
是NSDate
小号NSPredicate with NSDate
if (start || end)
{
if (!queryCount)
{
[filterString appendString:@"("];
}
else
{
[filterString appendString:@" && ("];
}
// date range and exact date
if (start && end)
{
[filterString appendFormat:@"%@ >= %@ && %@ <= %@", kTransactionFilterDateKey, start, kTransactionFilterDateKey, end];
}
// only start
else if (start && !end)
{
[filterString appendFormat:@"%@ >= %@ && %@ <= %@", kTransactionFilterDateKey, start, kTransactionFilterDateKey, [NSDate distantFuture]];
}
// only end
else if (end && !start)
{
[filterString appendFormat:@"%@ >= %@ && %@ <= %@", kTransactionFilterDateKey, [NSDate distantPast], kTransactionFilterDateKey, end];
}
[filterString appendString:@")"];
queryCount++;
}
当我到形成实际谓词对象(self.currentFilterString
是指其中上述块是从方法)的块:
我收到错误"Unable to parse the format string "(date >= 2014-09-24 04:00:00 +0000 && date <= 4001-01-01 00:00:00 +0000)""
这是标记为//only start
的块的结果。其他块的结果相同。我试过使用不同的日期值而不是distantFuture
,但是这也不会改变任何东西。
我也试过了一个变化,就像"%@ BETWEEN %@", kTransactionFilterDateKey, @[start, end]
,但这给了我同样的错误。
这是一个NSPredicate
使用日期的正确格式还是有不同的方法来做到这一点?我在网上找到的所有东西都让我认为我只是将NSDate
对象放入格式化的字符串中,就像我在做的一样。
您可以尝试的一件事是创建多个单独的谓词并设置复合谓词:[NSCompoundPredicate andPredicateWithSubpredicates:@ [pred1,pred2]]; – mitrenegade 2014-09-24 21:33:14