In meiner Anwendung habe ich eine große Tabelle von rund 12000 Einträge. Ich zeige es auf Tableview an. Bei der dynamischen Suche ist die Suchleiste jedoch zu langsam. Ich habe gelesen, dass NSPredicate-Methode mehr als NSRange permortant ist.Objekt und NSPredicate
Dies ist mein alter der Code:
[self.filteredListContent removeAllObjects];
listContent = [[NSArray alloc] initWithArray:[dbAccess getAllBooks]];
for (Book *book in listContent)
{
NSRange range = [book.textBook rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (range.location != NSNotFound)
{
[self.filteredListContent addObject:book];
}
}
Mein neuer Code:
[self.filteredListContent removeAllObjects];
listContent = [[NSArray alloc] initWithArray:[dbAccess getAllBooks]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[c] %@",searchText];
[self.filteredListContent addObject:[listContent filteredArrayUsingPredicate:predicate]];
Wenn ich versuche, diesen Code auszuführen ich diese Fehlermeldung erhalten: „nicht Regex Matching auf Objekt tun können . '"
Warum "SELF" und nicht "Lehrbuch"? Mit anderen Worten, Sie suchen nicht nach Entitäten, sondern nach Attributen, die "searchText" enthalten. – moxy
Ich weiß nicht, ob dies den Fehler verursacht, aber [self.filteredListContent addObject: [listContent filteredArrayUsingPredicate: predicate]]; sollte self.filteredListContent = [listContent filteredArrayUsingPredicate: Prädikat]; – rdelmar