Como predicar por meio de matrizes aninhadas com chaves
Eu tenho uma matriz chamadaself.eventsArray
que se parece com isso:
[
{
"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",
},
]
Eu tenho tentado filtrá-lo usandoNSPredicate
duas vezes. Quando o usuário pesquisa, ele precisa ser filtrado por nome (na matriz do artista) ou nome (na matriz de nível 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]];
Usando este código,self.filteredEventsArray
será preenchido com qualquer termo de pesquisa correspondente ao nível superior"name"
. Não fornecerá resultados de pesquisa para o artista aninhado"name"
. Eu suspeito que a razão pela qual ele não irá procurar através da matriz aninhada é por causa desta linha:
NSPredicate *predicateEventsByArtistName = [NSPredicate predicateWithFormat:@"SELF.%K.%K contains[c] %@",@"artist",@"name",searchText];
mas eu não consigo descobrir como mudar opredicateWithFormat:
para fazê-lo pesquisar através da matriz aninhada.