我正在尝试通过排除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
应应用于NSSet
的NSArray
。
如果您坚持使用NONE
。您可以将a
更改为
NSMutableArray* a = [NSMutableArray arrayWithObjects:@[@"1"], @[@"2"], @[@"3"], nil];
使SELF
变为NSArray
。