我的coredata模型的简化版本如下所示 我尝试过滤符合以下条件的一组资产"输入" ==" 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的事务的资产。
我做错了什么?
答案 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];