2016-10-30 5 views
0

Dies ist meine UISearchDisplayController, die funktioniert, wenn ich Suche ausführen und das Ergebnis mit passenden Startalphabet zurückgeben.
Was ich jedoch tun soll, ist das Aktivieren der Suche nach Text enthält Zeichenfolge.
Zum Beispiel, wenn ich Daten chocolate chip und dark chocolate habe, wenn ich chocolate auf der Suchleiste eintippe, möchte ich beide Ergebnisse zurückgeben.

Der einzige folgenden Code chocolate chip zurück, aber nicht dark chocolate:Enable UISearchDisplayController zu suchen Text enthält Zeichenfolge

self.searchDisplayController = [[[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self] autorelease]; 
self.searchDisplayController.searchResultsDelegate = self; 
self.searchDisplayController.searchResultsDataSource = self; 
self.searchDisplayController.searchResultsTitle = NSLocalizedString(@"Matches", @""); 

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    NSString *text = [searchBar.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    if ([text length]) { 
     [self.db fetchCompletionListWithString:text callback:^(NSArray *list) { 
      self.prefixArray = list; 
      [self.searchDisplayController.searchResultsTableView reloadData]; 
     }]; 
    } 
} 

Dies ist die fetchCompletionListWithString

- (void)_fetchCompletionListWithString:(NSString *)inStr callback:(void(^)(NSArray *))inCallback 
{ 
    if (!inStr || ![inStr length]) { 
     return; 
    } 

    const char *SQL = "SELECT id,title FROM entries WHERE title LIKE ? || '%';"; 
    ObjSqliteStatement *statement = [[ObjSqliteStatement alloc] initWithSQL:SQL db:db]; 
    [statement bindText:inStr toColumn:1]; 
    NSMutableArray *list = [NSMutableArray array]; 
    while ([statement step]) { 
     NSInteger entryID = [statement intFromColumn:0]; 
     NSString *title = [statement textFromColumn:1]; 
     if (entryID) { 
      [list addObject:@{kMDIdentifierKey:@(entryID), kMDTitleKey:title}]; 
     } 
    } 
    [statement release]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     inCallback(list); 
    }); 
} 

ist ich die *SQL-"SELECT id,title FROM entries WHERE title LIKE ? '%' || '%';" zu ändern versucht. Aber das funktioniert nicht.

Jeder Vorschlag wird geschätzt. Vielen Dank im Voraus.

Antwort

1

Abhängig davon, wo Sie das Ergebnis abfragen.

Wenn Sie ein Array abfragen, verwenden Sie NSPredicate, um das Ergebnis wie folgt zu filtern.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@",searchToken]; 

Wenn Sie auf Datenbank abzufragen, verwenden Sie SQL-Abfrage wie folgt aus:

SELECT * FROM mytable 
WHERE name LIKE '%chocolate%' 

Hope this Hilfe.

Basis auf Ihrer Bearbeitung, können Sie diesen Weg als tricky versuchen (Weil Ihre Bibliothek, die Sie verwenden, so alt ist). Wenn Sie SQL behandeln möchten, empfehle ich Ihnen, verwenden Realm

- (void)_fetchCompletionListWithString:(NSString *)inStr callback:(void(^)(NSArray *))inCallback 
{ 
    if (!inStr || ![inStr length]) { 
     return; 
    } 
inStr = [NSString stringWithFormat:@"%%%@%%",inStr]; 
    const char *SQL = "SELECT id,title FROM entries WHERE title LIKE ? ;"; 
    ObjSqliteStatement *statement = [[ObjSqliteStatement alloc] initWithSQL:SQL db:db]; 
    [statement bindText:inStr toColumn:1]; 
    NSMutableArray *list = [NSMutableArray array]; 
    while ([statement step]) { 
     NSInteger entryID = [statement intFromColumn:0]; 
     NSString *title = [statement textFromColumn:1]; 
     if (entryID) { 
      [list addObject:@{kMDIdentifierKey:@(entryID), kMDTitleKey:title}]; 
     } 
    } 
    [statement release]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     inCallback(list); 
    }); 
} 
+0

Danke, aber ich 'Verwendung von nicht deklarierter Bezeichner‚str'' und 'unerwartete Schnittstellennamen‚NSString‘: erwartet expression' Fehler. – user2872856

+0

Es ist Arbeit. Vielen Dank! – user2872856

Verwandte Themen