为啥我收到“无法解析 NSPredicate”错误

Posted

技术标签:

【中文标题】为啥我收到“无法解析 NSPredicate”错误【英文标题】:Why am I getting a "Unable to parse NSPredicate" error为什么我收到“无法解析 NSPredicate”错误 【发布时间】:2013-05-08 23:57:12 【问题描述】:

我构建了以下谓词以针对 Core Data 存储使用 MagicalRecord。

//  format the date correctly
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"yyyy-MM-dd*"];  //  HH:mm
NSString *formattedDate = [dateFormat stringFromDate:currentlySelectedDate];

NSString *stringPredicate = [NSMutableString stringWithFormat:
                             @"aPosX >= %f AND aPosX < %f AND %f > aPosY AND %f <= (aPosY + aPosH) AND aStartTime LIKE %@",
                             [staffIndex floatValue], [staffIndex floatValue] + 218, touchPoint.y, touchPoint.y, formattedDate];

NSPredicate *predicate =  ([NSPredicate predicateWithFormat: stringPredicate]);

它在最后一条语句中崩溃,并出现以下错误:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法解析格式字符串“aPosX >= 218.000000 AND aPosX aPosY AND 15.000000

我已经尝试了我所知道的一切,搜索了 Google 和 SO,但仍然不明白为什么它会失败...有人可以赐教吗?

【问题讨论】:

【参考方案1】:

不要创建格式字符串,使用谓词格式创建方法:

predicateWithFormat:

这允许谓词处理它认为合适的格式参数(在需要时添加引号)。

对于日期,您需要修改谓词以使用范围。您不能直接只查看日期的哪一天而忽略时间,所以您需要说:

date > startOfDay AND date < endOfDay

其中startOfDayendOfDay 是NSDate 实例(可能使用NSDateComponents 创建)。

【讨论】:

谢谢...它不再崩溃,但谓词没有按我预期的方式工作...我有一个日期时间存储在 astartTime 和看来它正在查看整个日期/时间。我只想要日期,而不是时间......我如何让它做到这一点?

以上是关于为啥我收到“无法解析 NSPredicate”错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到 NullPointerException 错误

为啥我收到 AbstractDynamicObject$CustomMessageMissingMethodException 错误?

为啥我收到错误“尝试打开未关闭的连接。”?

为啥我收到“由于保护级别而无法访问”错误?

为啥我收到的 jwt 格式错误?

为啥我收到 Laravel php artisan 迁移错误?