Prädikation durch verschachtelte Arrays mit Schlüsseln
Ich habe ein Array namensself.eventsArray
was so aussieht:
[
{
"artist": [
{
"artist_name": "Dillon Francis",
"name": "Dillon Francis",
},
{
"artist_name": "Major Lazer",
"name": "Major Lazer",
},
{
"artist_name": "Flosstradamus ",
"name": "Flosstradamus",
}
],
"name": "Mad Decent Block Party NYC",
},
{
"artist": [
{
"artist_name": "Ryan Raddon",
"name": "Kaskade",
}
],
"name": "Kaskade Atmosphere Tour NYC",
},
]
Ich habe versucht, es mit zu filternNSPredicate
zweimal. Wenn der Benutzer sucht, muss er entweder nach Name (im Artist-Array) oder nach Name (im Top-Level-Array) gefiltert werden.
NSPredicate *predicateEventsByName = [NSPredicate predicateWithFormat:@"SELF.%K contains[c] %@",@"name",searchText];
NSPredicate *predicateEventsByArtistName = [NSPredicate predicateWithFormat:@"SELF.%K.%K contains[c] %@",@"artist",@"name",searchText];
NSMutableArray *unfilteredEventsArray = [[NSMutableArray alloc] initWithCapacity:0];
unfilteredEventsArray = [NSMutableArray arrayWithArray:[self.eventsArray filteredArrayUsingPredicate:predicateEventsByName]];
[unfilteredEventsArray addObjectsFromArray:[self.eventsArray filteredArrayUsingPredicate:predicateEventsByArtistName]];
[self.filteredEventsArray addObjectsFromArray:[[NSSet setWithArray:unfilteredEventsArray] allObjects]];
Mit diesem Code,self.filteredEventsArray
wird mit einem Suchbegriff gefüllt, der der obersten Ebene entspricht"name"
. Es werden keine Suchergebnisse für den verschachtelten Interpreten angezeigt"name"
. Ich vermute, dass der Grund, warum das verschachtelte Array nicht durchsucht wird, in folgender Zeile liegt:
NSPredicate *predicateEventsByArtistName = [NSPredicate predicateWithFormat:@"SELF.%K.%K contains[c] %@",@"artist",@"name",searchText];
aber ich kann nicht herausfinden, wie man das ändertpredicateWithFormat:
damit es das verschachtelte Array durchsucht.