2016-07-05 23 views
-1

Ich habe eine Tabellenansicht implementiert, die Daten von Core Data Entity auflistet. Ich habe eine Reihe von Daten (ca. 6000 Datensätze - statische Daten) in Core Data gespeichert. Jetzt möchte ich die Suche in der Tabellenansicht mit NSFetchedResultsController implementieren.Suche Core Data Entity Datensätze mit NSFetchedResultsController

Einer der Spalte (Attribut) in meinem DB hat eine lange Zeichenfolge (durch Leerzeichen getrennt - wie ein Satz). Ich möchte ein Beginwith für jedes Wort in diesem Satz implementieren - meine App sollte den DB-Datensatz auflisten, wenn eines der Wörter BeginntMit Suchwort.

Zum Beispiel, hier ist meine Daten Beispiel:

Aufnahme 1 - Hallo Hallo Hallo Wie Sie Record 2 ist - Hallo Hallo Nimm 3 - Test Hallo

Nun, wenn ich für die Suche 'Hallo' Es sollte Record-1 und Record-2 auflisten.

Antwort

0

Sie können den Code unten verwenden:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText]; 
[[_fetchedResultsController fetchRequest] setPredicate:predicate]; 
[[_fetchedResultsController fetchRequest] setFetchLimit:50]; 

Oder wenn finden Sie Suchergebnis Controller

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { 
    NSInteger searchOption = controller.searchBar.selectedScopeButtonIndex; 
    return [self searchDisplayController:controller shouldReloadTableForSearchString:searchString searchScope:searchOption]; 
} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption { 
    NSString* searchString = controller.searchBar.text; 
    return [self searchDisplayController:controller shouldReloadTableForSearchString:searchString searchScope:searchOption]; 
} 

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString*)searchString searchScope:(NSInteger)searchOption { 

    NSPredicate *predicate = nil; 
    if ([searchString length]) 
     if (searchOption == 0) // full text, in my implementation. Other scope button titles are "Author", "Title" 
      predicate = [NSPredicate predicateWithFormat:@"title contains[cd] %@ OR author contains[cd] %@", searchString, searchString]; 
     else 
      // docs say keys are case insensitive, but apparently not so. 
      predicate = [NSPredicate predicateWithFormat:@"%K contains[cd] %@", [[controller.searchBar.scopeButtonTitles objectAtIndex:searchOption] lowercaseString], searchString]; 

    [fetchedResultsController.fetchRequest setPredicate:predicate]; 

    NSError *error = nil; 

    if (![[self fetchedResultsController] performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }   

    return YES; 
} 
verwenden