使用NSSET过滤NSARRAY时使用无问题



我正在尝试通过排除NSSET中的元素来过滤NSArray。我正在做这样的事情:

    NSMutableArray* a = [NSMutableArray arrayWithObjects:@"1", @"2", @"3", nil];
    NSSet* set = [NSSet setWithObjects:@"2", nil];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE SELF IN %@", set];
    NSArray* b = [a filteredArrayUsingPredicate:predicate];

但是,此代码引发了例外:

终止由于未被发现的例外" nsinvalidargumentException",原因是:'全部或任何操作员的左手侧必须是nsarray或nsset

我做错了什么?

您应该在谓词中使用NOT而不是NONE

[NSPredicate predicateWithFormat:@"NOT SELF IN %@", set]

这是因为谓词应用于数组中的每个对象(SELF),即NSString。相反,None应应用于NSSetNSArray

如果您坚持使用NONE。您可以将a更改为

NSMutableArray* a = [NSMutableArray arrayWithObjects:@[@"1"], @[@"2"], @[@"3"], nil];

使SELF变为NSArray

最新更新