NSPredicate filter array within object within array
ios, objective-c
Solution
First of all, you should not use `stringWithFormat` to build predicates. This can cause problems if the search text contains any special characters like `'` or `"`. So you should replace
NSString *nameformatString = [NSString stringWithFormat:@"stationName contains[c] '%@'", text];
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:nameformatString];
by
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"stationName contains[c] %@", text];
To search within an array, you have to use "ANY" in the predicate:
NSPredicate *aToZPredicate =
[NSPredicate predicateWithFormat:@"ANY stationSearchData.browseAtozArray.city CONTAINS[c] %@", text];
Problem
I have the following method: ``` - (NSMutableArray *)getFilteredArrayFromArray:(NSMutableArray *)array withText:(NSString *)text { if ([array count] <= 0) return nil; NSMutableArray *arrayToFilter = [NSMutableArray arrayWithArray:array]; NSString *nameformatString = [NSString stringWithFormat:@"stationName contains[c] '%@'", text]; NSPredicate *namePredicate = [NSPredicate predicateWithFormat:nameformatString]; NSString *descformatString = [NSString stringWithFormat:@"stationTagline contains[c] '%@'", text]; NSPredicate *descPredicate = [NSPredicate predicateWithFormat:descformatString]; NSString *aToZformatString = [NSString stringWithFormat:@"stationSearchData.browseAtozArray.city contains[c] '%@'", text]; NSPredicate *aToZPredicate = [NSPredicate predicateWithFormat:aToZformatString]; NSPredicate * combinePredicate = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:namePredicate, descPredicate, aToZPredicate, nil]]; [arrayToFilter filterUsingPredicate:combinePredicate]; return arrayToFilter; } ``` The first 2 predicates work fine. But the last one (aToZPredicate), is not working. stationSearchData is a StationSearchData object, and browseAtozArray is an NSMutableArray. How can I use a predicate to essentially search an array within an array within an array? Here is the interface for the StationSearchData object: ``` @interface StationSearchData : NSObject @property (nonatomic, strong) NSString *location; @property (nonatomic, strong) NSString *city; @property (nonatomic, strong) NSString *latitude; @property (nonatomic, strong) NSString *longitude; @property (nonatomic, strong) NSMutableArray *browseAtozArray; @property (nonatomic, strong) NSMutableArray *genreArray; @end ``` Thanks!