过滤包含自定义对象的NSArray

sam*_*mir 10 objective-c nsarray ios

我有UISearchBar,UITableView,它返回一个Web服务NSMutableArray包含这样的对象:

//Food.h
Food : NSObject { 
    NSString *foodName;
    int idFood;
}

@property (nonatomic, strong) NSString *foodName;
Run Code Online (Sandbox Code Playgroud)

而阵列:

Food *food1 = [Food alloc]initWithName:@"samsar" andId:@"1"];
Food *food2 = [Food alloc] initWithName:@"rusaramar" andId:@"2"];

NSSarray *array = [NSArray arrayWithObjects:food1, food2, nil];
Run Code Online (Sandbox Code Playgroud)

如何使用名称以"sa"开头的对象过滤我的数组?

Ash*_*row 26

您可以使用以下代码过滤任何您想要的数组:

NSMutableArray *array = ...;

[array filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    return [evaluatedObject.foodName hasPrefix:searchBar.text];
}];
Run Code Online (Sandbox Code Playgroud)

这将"就地"过滤数组,并且只能在NSMutableArray.如果您想获得一个已经过滤的新数组,请使用该filteredArrayUsingPredicate: NSArray方法.

  • 对于这种情况,块谓词似乎有点矫枉过正.你可以使用`[NSPredicate predicateWithFormat:@"foodName beginwith%@",searchBar.text]`. (2认同)