Iphone 将选择器与NSPredicate一起使用

Iphone 将选择器与NSPredicate一起使用,iphone,nspredicate,Iphone,Nspredicate,我有一个包含几个不同字符串的对象。显示此对象时,根据对象的另一个属性,我将显示一个或另一个字符串。我在对象中定义了一个函数,负责决定显示哪个字符串。因此,作为一个简单的例子: @interface MyObject : NSObject { NSString* string1; NSString* string2; NSString* string3; int stringNum; } -(NSString)getDisplayString { if(s

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

@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
的行为,但随后我将在逻辑上加倍,并可能导致一个错误。

是的

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

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

我想你指的是getDisplayString,不是getDisplayName?关于方法名
get
-我同时也学到了这一点(这个问题已经8个月了:)@alku83呜呜,谢谢你抓住它:)是的,这是一个老问题,但我只是偶然发现了它,它没有答案,这对人们来说是一个很好的信息