Cómo predicar a través de matrices anidadas con claves
Tengo una matriz llamadaself.eventsArray
que se parece a esto:
[
{
"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",
},
]
He estado tratando de filtrarlo usandoNSPredicate
dos veces. Cuando el usuario busca, debe filtrarse por nombre (en la matriz del artista) o por nombre (en la matriz de nivel superior).
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]];
Utilizando este código,self.filteredEventsArray
se rellenará con cualquier término de búsqueda que coincida con el nivel superior"name"
. No dará ningún resultado de búsqueda para el artista anidado."name"
. Sospecho que la razón por la que no buscará en la matriz anidada es por esta línea:
NSPredicate *predicateEventsByArtistName = [NSPredicate predicateWithFormat:@"SELF.%K.%K contains[c] %@",@"artist",@"name",searchText];
pero no puedo averiguar cómo cambiar elpredicateWithFormat:
para hacer que la búsqueda a través de la matriz anidada.