2012-04-08 3 views
2

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 . '"

+2

Warum "SELF" und nicht "Lehrbuch"? Mit anderen Worten, Sie suchen nicht nach Entitäten, sondern nach Attributen, die "searchText" enthalten. – moxy

+0

Ich weiß nicht, ob dies den Fehler verursacht, aber [self.filteredListContent addObject: [listContent filteredArrayUsingPredicate: predicate]]; sollte self.filteredListContent = [listContent filteredArrayUsingPredicate: Prädikat]; – rdelmar

Antwort

0

Ist Ihre Buchklasse eine Zeichenfolge? Wenn nicht, dann können Sie SELF nicht mögen. Sie müssen den Namen der Eigenschaft, die Sie vergleichen, ersetzen.

2

Ich möchte etwas mehr tun ...

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%k like[c] %@",propertyIAmLookingFor,searchText];