NSPredicate 一对多日期比较
Posted
技术标签:
【中文标题】NSPredicate 一对多日期比较【英文标题】:NSPredicate one-to-many dates comparing 【发布时间】:2014-08-28 20:54:38 【问题描述】:我正在尝试获取过去完成一项任务的所有对象。
我的谓词:
//Other Class
NSString *predicateFormat = [NSString stringWithFormat:@"status.objectId != '142' && status.objectId != '143' && deleted == 0 && ANY tasks.complete_till < %@",[NSDate date]];
class.predicateFormat = predicateFormat;
//Other class
[NSPredicate predicateWithFormat:_predicateFormat];
complete_till - 数据库中的日期
任何其他带有 ANY 的谓词都可以正常工作,但日期会导致崩溃:
> *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format
> string "status.objectId != '142' && status.objectId != '143' &&
> deleted == 0 && ANY tasks.complete_till < 2014-08-28 20:51:18 +0000"'
更新:
ANY tasks.complete_till < 2014-08-29 05:15:27 +0000
也会导致崩溃。
【问题讨论】:
你好@itruf,tasks.complete_till
是NSDate
类型的对象吗?因为您只是将其作为无效的字符串进行比较。两者都应该是相同类型的 NSString 或 NSDate。
【参考方案1】:
如果没有看到您正在应用它的实际对象,很难判断问题出在哪里。
我假设您的对象上有一个具有 objectId 的状态,即 fooBar.status.objectId
开始分解你的谓词。先从
开始[NSPredicate predicateWithFormat:@"status.objectId != '142'"];
然后添加
[NSPredicate predicateWithFormat:@"status.objectId != '142' && status.objectId != '143'];
【讨论】:
[NSPredicate predicateWithFormat:@"ANY tasks.complete_till 这告诉我你的日期比较。当您没有日期比较时,应用程序是否正常工作?【参考方案2】:我发现,nsstring stringWithFormat: 返回的结果与 predicateWithFormat 不同。
这是我的问题
【讨论】:
以上是关于NSPredicate 一对多日期比较的主要内容,如果未能解决你的问题,请参考以下文章