Фильтруйте NSArray, который содержит пользовательские объекты - PullRequest
10 голосов
/ 05 марта 2012

У меня есть UISearchBar, UITableView, веб-сервис, который возвращает NSMutableArray, который содержит такие объекты:

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

@property (nonatomic, strong) NSString *foodName;

И массив:

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

NSSarray *array = [NSArray arrayWithObjects:food1, food2, nil];

Как мне отфильтровать массив с объектами, имена которых начинаются с "sa"?

Ответы [ 2 ]

26 голосов
/ 05 марта 2012

Вы можете отфильтровать любой массив, как вам хотелось бы, с помощью следующего кода:

NSMutableArray *array = ...;

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

Это отфильтрует массив "на месте" и будет доступен только на NSMutableArray. Если вы хотите получить новый массив, отфильтрованный для вас, используйте метод filteredArrayUsingPredicate: NSArray.

0 голосов
/ 27 июня 2015
NSString *predString = [NSString stringWithFormat:@"(foodName BEGINSWITH[cd] '%@')", @"sa"];

NSPredicate *pred = [NSPredicate predicateWithFormat:predString];

NSArray *array = [arr filteredArrayUsingPredicate:pred];
NSLog(@"%@", array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...