使用NSPredicate在NSDates之间进行过滤

时间:2015-01-28 17:21:12

标签: ios core-data nspredicate

我的coredata模型的简化版本如下所示 Core Data Model 我尝试过滤符合以下条件的一组资产"输入" ==" DIVIDEND_TYPE"而且" date"落在" startDate"和" endDate"。

我的谓词看起来像这样

 NSPredicate *myPredicate = [NSPredicate predicateWithFormat:
                                @"ANY transactions.type == %@ AND ANY transactions.date >= %@ AND ANY transactions.date <= %@", DIVIDEND_TYPE, startDate, endDate];

NSSet *filteredSet = [self.portfolio.assets filteredSetUsingPredicate:myPredicate];

这个谓词似乎尊重startDate和type,但不是endDate。 filteredSet始终包含包含日期超出endDate的事务的资产。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

条件是针对每个ANY子句独立测试的,因此如果Asset具有正确类型的任何事务,并且任何事务在startDate等之后具有日期,那么它可能是满足每个条件的不同事务测试。改为使用SUBQUERY:它允许您测试每个事务的几个属性:

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"SUBQUERY(transactions, $T, $T.type == %@ AND $T.date >= %@ AND $T.date <= %@).@count > 0", DIVIDEND_TYPE, startDate, endDate];