2012-03-04 29 views
9

tengo UISearchBar, UITableView, un servicio web que devuelve un NSMutableArray que contienen objetos como este:Filtrar una NSArray que contiene objetos personalizados

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

@property (nonatomic, strong) NSString *foodName; 

Y la matriz:

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

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

¿Cómo filtrar mi matriz con objetos cuyo nombre comienza por "sa"?

Respuesta

24

puede filtrar cualquier matriz como desea con el siguiente código:

NSMutableArray *array = ...; 

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

Esto filtra la matriz "in situ" y sólo es accesible en una NSMutableArray. Si desea obtener un nuevo conjunto filtrado para usted, utilice el método filteredArrayUsingPredicate:NSArray.

+0

Gracias por su respuesta, ¿qué es [evalutedObject objectName] ?? – samir

+0

'objectName' era la propiedad en la subclase' NSObject' en su pregunta. Si desea filtrar basándose en una propiedad diferente de los objetos en su matriz, simplemente use el nombre de la propiedad en su lugar. –

+0

Lo siento, estoy haciendo esto: myObject * obj = [myObject new]; myArray = [myArray filteredArrayUsingPredicate: [NSPredicate predicateWithBlock:^BOOL (id evaluateObject, NSDictionary * bindings) { return [[obj objectName] hasPrefix: searchTextField.text]; }]]; – samir

0
NSString *predString = [NSString stringWithFormat:@"(foodName BEGINSWITH[cd] '%@')", @"sa"]; 

NSPredicate *pred = [NSPredicate predicateWithFormat:predString]; 

NSArray *array = [arr filteredArrayUsingPredicate:pred]; 
NSLog(@"%@", array); 
Cuestiones relacionadas