【问题标题】:Troubles using NONE when filtering an NSArray with an NSSet使用 NSSet 过滤 NSArray 时使用 NONE 的问题
【发布时间】:2012-10-20 05:49:45
【问题描述】:

我试图通过排除 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

我做错了什么?

【问题讨论】:

    标签: cocoa nsarray nsset


    【解决方案1】:

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

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

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

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

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

    这样SELF 就变成了NSArray

    【讨论】:

    • 谢谢!我没有意识到:-)。这回答了我的问题。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多