2010-07-13 39 views
1

我有一个对象,其中包含几个不同的NSStrings。当显示此对象时,根据对象的另一个属性,我将显示一个字符串或另一个字符串。我在对象中定义了一个函数,负责决定显示哪个字符串。所以,作为一个简单的例子:使用选择器与NSPredicate

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

+0

[NSPredicate with functions or selectors]可能的重复(http://stackoverflow.com/questions/3569742/nspredicate-with-functions-or-selectors) – 2014-08-26 08:04:12

回答

0

是的。

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

作为一个侧面说明,你不应该get,除非你打算通过输出参数按地址将返回值前缀的方法名。检查出the documentation欲知更多信息。

+0

我假设你的意思是getDisplayString,而不是getDisplayName?关于方法名称'get'的公平点 - 我在此期间学到了这个(这个问题是8个月大:): – 2011-02-15 04:32:57

+0

@ alku83哎呀,谢谢你抓到:)而且,这是旧的,但我刚碰到它并没有答案,这是人们知道的很好的信息。 – 2011-02-15 05:19:53

+0

当然不抱怨,谢谢你的回答! – 2011-02-16 03:11:05