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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage