0

我试图通过排除 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”而终止应用程序,原因:“ALL 或 ANY 运算符的左侧必须是 NSArray 或 NSSet

我做错了什么?

4

1 回答 1

3

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

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

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

如果你坚持使用NONE. 您可以更改a

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

这样SELF就变成了NSArray

于 2012-10-20T06:10:27.400 回答