我正在尝试通过排除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
我做错了什么?
答案 0 :(得分:3)
您应该在谓词中使用NOT
而不是NONE
:
[NSPredicate predicateWithFormat:@"NOT SELF IN %@", set]
这是因为谓词应用于数组中的每个对象(SELF
),即NSString
。相反,None
应该应用于NSArray
的{{1}}。
如果您坚持使用NSSet
。您可以将NONE
更改为
a
以便NSMutableArray* a = [NSMutableArray arrayWithObjects:@[@"1"], @[@"2"], @[@"3"], nil];
成为SELF
。