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_tillNSDate 类型的对象吗?因为您只是将其作为无效的字符串进行比较。两者都应该是相同类型的 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 一对多日期比较的主要内容,如果未能解决你的问题,请参考以下文章

coredata NSPredicate 中的日期比较

使用 NSPredicate 获取一对多关系值

使用 NSPredicate 比较日期以检索符合条件的对象

使用 NSPredicate 比较核心数据查询中的日期

NSPredicate - 核心数据 - 比较两个属性

一对多关系 iPhone - NSPredicate 核心数据查询