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

Ios 使用NSPredicate比较日期以检索符合条件的对象,ios,objective-c,nspredicate,Ios,Objective C,Nspredicate,我试图根据特定键中的值过滤对象的NSArray。我的对象在创建时有一个日期,因此基本上,我希望创建对象三个月,但每周只显示一个,因此,我需要过滤结果,根据日期显示对象 我有一个数据库,包含创建这些对象所需的所有信息。我的第一个想法是在这个数据库中创建一个句点键,指定对象的可用时间。例如,对象1在“period”键中的数字为604800(一周的时间间隔)。现在,为了检索这些对象,我需要比较两个键,createdAt是一个NSDate,timeInterval是一个NSNumber 我尝试在表中创建

我试图根据特定键中的值过滤对象的NSArray。我的对象在创建时有一个日期,因此基本上,我希望创建对象三个月,但每周只显示一个,因此,我需要过滤结果,根据日期显示对象

我有一个数据库,包含创建这些对象所需的所有信息。我的第一个想法是在这个数据库中创建一个句点键,指定对象的可用时间。例如,对象1在“period”键中的数字为604800(一周的时间间隔)。现在,为了检索这些对象,我需要比较两个键,createdAt是一个
NSDate
,timeInterval是一个
NSNumber

我尝试在表中创建两列
NSDate
并使用谓词:
[NSPredicate predicateWithFormat:“(startDate=%@”),今天,今天],虽然我需要做更多的工作来创建带有这两个添加列的对象,但是上面提到的谓词不起作用,我不知道为什么


无论如何,我正在寻找一个简单的解决方案和一些代码

您不必创建和填充额外的列,因为您可以进行简单的算术运算 例如,在谓词中:

[NSPredicate predicateWithFormat:@"createdAt <= %@ AND createdAt + period >= %@", today, today]
这意味着只对保存的数据库执行获取,但不会执行
不包括未保存的更改

你的
看起来放错地方了。再次检查一下,对不起,这是一个打字错误,但不是问题。如果你今天要通过
两次(
=
),那不是只会给你精确的相等(
=
)吗?结构(属性和it类)是什么数组中存储的对象的数目?可能是您需要将谓词更改为
[NSPredicate predicateWithFormat:@“(SELF.startDate=%@)”,今天,今天]
或使用
sortedArrayUsingFunction:
。这就是我要找的。我会尝试给出反馈。似乎它会起作用。应用程序崩溃,消息
未识别的选择器被发送到实例
。我的周期是
NSNumber
,我不确定这是否是问题所在。如果是,是否可以将其转换为
double
NSPredicate
中?@Jorge:我用
NSDate*createdAt;NSNumber*period;
对它进行了测试,它成功了。你能显示完整的错误消息吗?
由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:'-[\u NSDate objCType]:无法识别的选择器发送到实例0x10b551d50'
,这是我的代码:
NSPredicate*predicateTime=[NSPredicate predicateWithFormat:@“createdAt=%@”,hoje,hoje]
其中
createdAt
NSDate
diaseriesativa
os
NSNumber
,这两列都在我的数据库表中。我在
diaserieativa
列和
createdAt
列中有两个编号为604800的对象,这两个对象都有2013-12-26T18:26:20.721Z。
[request setIncludesPendingChanges:NO];