Ios NSPredicate不返回预期的项目

Ios NSPredicate不返回预期的项目,ios,objective-c,nspredicate,Ios,Objective C,Nspredicate,我试图在数组中查找itemId和size不匹配的项。 但是,以下查询不会返回相同但大小不同的itemId项目。我想知道我错过了什么 首先,我提取项目如下,然后我试图找到这个项目的赞扬 NSPredicate *itemPredicate = [NSPredicate predicateWithFormat:@"(%K == %@)", kItemId, itemId]; NSPredicate *sizePredicate = [NSPredicate predicateWithFormat:@

我试图在数组中查找
itemId
size
不匹配的项。 但是,以下查询不会返回相同但大小不同的
itemId
项目。我想知道我错过了什么

首先,我提取项目如下,然后我试图找到这个项目的赞扬

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]];

我认为这里有两个问题:

  • 您的互补
    谓词使用的是
    sizePredicate
    ,但我认为您希望使用
    restSizePredicate

  • 我想您应该使用
    谓词。现在,您将错过任何大小相同或具有相同
    itemId
    的内容

  • 另一种方法是使用获取所有对象的fetch。然后使用现有的fetch获取所需的原始集。然后使用集合算法从第一个集合中删除第二个集合

    **编辑**

  • 我刚刚发现了
    notPredicateWithSubpredicate
    ,这可能正是您想要的:保持第一个查询和谓词不变。然后对于第二个查询,使用
    notPredicateWithSubpredicate
    并传入第一个查询中的谓词

  • 你能试试这个NSPredicate*itemPredicate=[NSPredicate predicateWithFormat:@“(%K==[c]]@)”,kItemId,itemId];我想查找
    itemId
    size
    一起不在数组中的项目。换句话说,
    itemInOrder的补码
    你们能用空状态的伪文本存储它们并和之比较吗?你们能用一个例子来说明你们的评论吗?你们能用一个例子来说明吗?