我正在尝试在数组中找到itemId
和size
不匹配的项目。
但是,以下查询不会返回itemId
相同但size
不同的项目。我想知道我错过了什么。
首先,我按如下方式提取项目,然后我试图找到对此项目的赞美。
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]];
答案 0 :(得分:1)
我认为这里有两个问题:
您的补充and
谓词正在使用sizePredicate
,但我认为您希望使用restSizePredicate
。
我认为你想使用or
谓词。正如您现在所拥有的那样,您将错过任何具有相同尺寸或相同itemId
的内容。
另一种方法可能是使用获取所有对象的获取。然后使用现有的fetch获取您想要的原始集。然后使用Set Arithmetic从第一组中删除第二组。
**编辑**
notPredicateWithSubpredicate
,这可能就是你想要的:保持你的第一个查询和谓词不变。然后,对于第二个查询,请使用notPredicateWithSubpredicate
并从第一个查询中传入谓词。