【问题标题】:Using selectors with NSPredicate将选择器与 NSPredicate 一起使用
【发布时间】:2010-07-13 00:37:40
【问题描述】:

我有一个包含几个不同 NSString 的对象。在显示这个对象时,根据对象的另一个属性,我将显示一个字符串或另一个字符串。我在对象中定义了一个函数,负责决定显示哪个字符串。所以,举个简单的例子:

@interface MyObject : NSObject {
    NSString* string1;
    NSString* string2;
    NSString* string3;
    int stringNum;
}

-(NSString)getDisplayString {
    if(stringNum == 1) {
        return string1; 
    } else if (stringNum == 2) {
        return string2;
    } else if (stringNum == 3) {
        return string3;
    }
}

现在,我想创建一个NSPredicate 来搜索这些对象的数组。是否可以创建一个搜索getDisplayString 的结果?显然我可以在谓词中复制getDisplayString 的行为,但是我会在逻辑上加倍,并且可能会在某个地方导致错误。

【问题讨论】:

标签: iphone nspredicate


【解决方案1】:

是的。

NSPredicate *p = [NSPredicate predicateWithFormat:@"getDisplayString = %@", @"foo"];
NSArray *filtered = [arrayOfMyObjects filteredArrayUsingPredicate:p];

作为旁注,您不应该在方法名称前加上get,除非您要通过 out 参数返回值 byref。查看the documentation 了解更多信息。

【讨论】:

  • 我假设您的意思是 getDisplayString,而不是 getDisplayName?关于方法名称get 的公平点 - 我在此期间学到了这一点(这个问题已经 8 个月大了 :)
  • @alku83 哎呀,感谢您发现 :) 是的,这是旧的,但我刚刚遇到它并没有答案,这是人们了解的好信息。
猜你喜欢
  • 1970-01-01
  • 2015-02-04
  • 2011-01-11
  • 1970-01-01
  • 2021-09-25
  • 2017-04-22
  • 2021-09-01
  • 2014-01-08
  • 1970-01-01
相关资源
最近更新 更多