samir samir - 6 months ago 26
Objective-C Question

Filter an NSArray which contains custom objects

I have

UISearchBar
,
UITableView
, a web service which returns a
NSMutableArray
that contain objects like this:

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

@property (nonatomic, strong) NSString *foodName;


And the array:

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

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


How do I filter my array with objects with name beginning with "sa"?

Answer

You can filter any array like you'd like to with the following code:

NSMutableArray *array = ...;

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

This will filter the array "in-place" and is only accessible on an NSMutableArray. If you'd like to get a new array that's been filtered for you, use the filteredArrayUsingPredicate: NSArray method.