NSMutableArray和NSPredicate过滤

kfo*_*rim 7 iphone cocoa objective-c ipad ios

我试图用一个对象中的两个实体来过滤我的数组,就像我有一个Person对象,其中我有名字,地址,数字,电子邮件等.我试图用名称和数字过滤我的数组对象列表.如何使用NSPredicate实现这一目标?

dre*_*lax 13

创建谓词(以下假定您的Person类有namenumber字符串属性):

NSString *nameFilter = @"Steve*";
NSString *numberFilter = @"555-*";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(name like %@) or (number like %@)", nameFilter, numberFilter];
Run Code Online (Sandbox Code Playgroud)

然后,过滤阵列(这是假设你有一个NSArrayPerson对象):

NSArray *personArray = /* obtain from somewhere */;
NSArray *filtered = [personArray filteredArrayUsingPredicate:pred];
Run Code Online (Sandbox Code Playgroud)

结果将是一个包含可能是"史蒂夫","史蒂文"等Person对象的数组,name其编号以555-.

编辑

你所说的并没有多大意义.您无法从类中删除属性(或者更确切地说,您不应该删除).如果您只想要一个只包含名称和数字的数组,则必须遍历Person对象数组:

NSMutableArray *result = [NSMutableArray array];

for (Person *p in personArray)
    [result addObject:[NSString stringWithFormat:"%@ : %@", [p name], [p number]]];
Run Code Online (Sandbox Code Playgroud)