NSPredicate 没有 return 预期的项目
NSPredicate does not return the expected items
我试图在数组中查找 itemId
和 size
不匹配的项目。
但是,以下查询不会 return me item(s) where itemId
same but size
different.我想知道我错过了什么。
首先我按如下方式提取该项目,然后我试图找到对该项目的赞美。
NSPredicate *itemPredicate = [NSPredicate predicateWithFormat:@"(%K == %@)", kItemId, itemId];
NSPredicate *sizePredicate = [NSPredicate predicateWithFormat:@"(%K == %@)", kSize, [NSString stringWithFormat:@"%d", size]];
NSPredicate *combinedPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[itemPredicate, sizePredicate]];
NSArray *itemInOrder = [sharedData.orderItems filteredArrayUsingPredicate:combinedPredicate];
正在尝试提取 免费 项itemInOrder
NSPredicate *restOfOrderPredicate = [NSPredicate predicateWithFormat:@"(%K != %@)", kItemId, itemId];
NSPredicate *restSizePredicate = [NSPredicate predicateWithFormat:@"(%K != %@)", kSize, [NSString stringWithFormat:@"%d", size]];
NSPredicate *restCombinedPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[restSizePredicate, sizePredicate]];
NSMutableArray *restOfItemsInOrder = [NSMutableArray arrayWithArray:[sharedData.orderItems filteredArrayUsingPredicate:restOfOrderPredicate]];
我认为这里有两个问题:
您的补充 and
谓词正在使用 sizePredicate
,但我认为您想使用 restSizePredicate
.
我认为您想使用 or
谓词。正如你现在拥有的那样,你会错过任何大小相同或 itemId
.
的东西
另一种方法是使用获取所有对象的提取。然后使用您现有的提取来获取您想要的原始集。然后使用 Set Arithmetic 从第一个集合中删除第二个集合。
** 编辑 **
- 我刚刚发现
notPredicateWithSubpredicate
这可能正是您想要的:保持第一个查询和谓词不变。然后对于第二个查询,使用 notPredicateWithSubpredicate
并传入第一个查询的谓词。
我试图在数组中查找 itemId
和 size
不匹配的项目。
但是,以下查询不会 return me item(s) where itemId
same but size
different.我想知道我错过了什么。
首先我按如下方式提取该项目,然后我试图找到对该项目的赞美。
NSPredicate *itemPredicate = [NSPredicate predicateWithFormat:@"(%K == %@)", kItemId, itemId];
NSPredicate *sizePredicate = [NSPredicate predicateWithFormat:@"(%K == %@)", kSize, [NSString stringWithFormat:@"%d", size]];
NSPredicate *combinedPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[itemPredicate, sizePredicate]];
NSArray *itemInOrder = [sharedData.orderItems filteredArrayUsingPredicate:combinedPredicate];
正在尝试提取 免费 项itemInOrder
NSPredicate *restOfOrderPredicate = [NSPredicate predicateWithFormat:@"(%K != %@)", kItemId, itemId];
NSPredicate *restSizePredicate = [NSPredicate predicateWithFormat:@"(%K != %@)", kSize, [NSString stringWithFormat:@"%d", size]];
NSPredicate *restCombinedPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[restSizePredicate, sizePredicate]];
NSMutableArray *restOfItemsInOrder = [NSMutableArray arrayWithArray:[sharedData.orderItems filteredArrayUsingPredicate:restOfOrderPredicate]];
我认为这里有两个问题:
您的补充
and
谓词正在使用sizePredicate
,但我认为您想使用restSizePredicate
.我认为您想使用
or
谓词。正如你现在拥有的那样,你会错过任何大小相同或itemId
. 的东西
另一种方法是使用获取所有对象的提取。然后使用您现有的提取来获取您想要的原始集。然后使用 Set Arithmetic 从第一个集合中删除第二个集合。
** 编辑 **
- 我刚刚发现
notPredicateWithSubpredicate
这可能正是您想要的:保持第一个查询和谓词不变。然后对于第二个查询,使用notPredicateWithSubpredicate
并传入第一个查询的谓词。