Как предсказать через вложенные массивы с ключами
У меня есть массив под названиемself.eventsArray
который выглядит так:
[
{
"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",
},
]
Я пытался отфильтровать его с помощьюNSPredicate
два раза. Когда пользователь выполняет поиск, его нужно отфильтровать либо по имени (в массиве Artist), либо по имени (в массиве верхнего уровня).
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]];
Используя этот код,self.filteredEventsArray
будет заполнен любым поисковым термином, соответствующим верхнему уровню"name"
, Это не даст никаких результатов поиска для вложенного художника"name"
, Я подозреваю, что причина, по которой он не будет искать во вложенном массиве, заключается в следующей строке:
NSPredicate *predicateEventsByArtistName = [NSPredicate predicateWithFormat:@"SELF.%K.%K contains[c] %@",@"artist",@"name",searchText];
но я не могу понять, как изменитьpredicateWithFormat:
чтобы сделать поиск через вложенный массив.