NSUnknownKeyException bei Verwendung der Suchleiste.diese Klasse ist für den Schlüsselnamen nicht mit der Schlüsselwertcodierung kompatibel
-
21-12-2019 - |
Frage
Ich habe mir Posts angesehen, die andere Leute mit dieser Art von Fehler gepostet haben, aber nicht in einem UISearchBar
, und keine, mit der ich mein Problem in Verbindung bringen kann:
Kurz gesagt, ich spiele mit Suchleisten und versuche, die Grundlagen zu erstellen.
Ich habe 2 Arrays
@interface ViewController ()
{
NSMutableArray *dataList;
NSArray *searchResults;
}
Ich habe mein Datenlisten-Array wie folgt gefüllt:
dataList = [[NSMutableArray alloc] init];
[dataList addObject:@"This is row 1"];
[dataList addObject:@"That is row 2"];
....
[dataList addObject:@"More data in 20"];
Ich habe meine eingerichtet searchDisplayController
:
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString*) searchString
{
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
return YES;
}
und ich habe eine Filterfunktion:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
searchResults = [dataList filteredArrayUsingPredicate:resultPredicate];
}
In der letzten Filterfunktion erhalte ich am letzten Zeilenanfang eine Fehlermeldung searchResults =
2014-07-29 17:47:16.056 TestSearch[44628:60b] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFConstantString 0x1000069c8> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.'
*** First throw call stack:
...
...
...
Irgendwelche Ideen?
Ich habe versucht, eine zu verwenden NSArray
statt NSMutableArray
aber ich bekomme den gleichen Fehler.
Der tableView
füllt sich OK mit den Daten, also kein Problem.
Lösung
name
ist kein Eigentum eines NSString
Objekt.verwenden self
für das Prädikat:
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"self contains[c] %@", searchText];