2012-03-04 18 views
9

ho UISearchBar, UITableView, un servizio web che restituisce una NSMutableArray che contengono oggetti come questo:Filtro un NSArray che contiene oggetti personalizzati

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

@property (nonatomic, strong) NSString *foodName; 

e la matrice:

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

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

Come faccio filtra il mio array con oggetti con nome che inizia con "sa"?

risposta

24

È possibile filtrare qualsiasi array come si desidera con il seguente codice:

NSMutableArray *array = ...; 

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

Ciò filtrare la matrice "in-place" ed è accessibile solo su un NSMutableArray. Se desideri ottenere un nuovo array che è stato filtrato per te, utilizza il metodo filteredArrayUsingPredicate:NSArray.

+0

Grazie per la risposta, cosa è [evalutedObject objectName] ?? – samir

+0

'objectName' era la proprietà nella sottoclasse' NSObject' nella tua domanda. Se si desidera filtrare in base a una proprietà diversa degli oggetti nell'array, utilizzare invece solo il nome della proprietà. –

+0

Mi dispiace, sto facendo così: myObject * obj = [myObject new]; myArray = [myArray filteredArrayUsingPredicate: [predicato NSPredicateWithBlock:^BOOL (id signedObject, 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); 
Problemi correlati