UISearchBar不过滤sqlite UITableView

时间:2014-06-22 00:54:09

标签: ios objective-c sqlite uitableview uisearchbar

您好我有一个由sqlite数据库填充的TableView,我已经设置了一个UISearchBar来过滤它,但它没有返回任何结果。这是我的搜索栏代码:

-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text
{
    if(text.length == 0)
    {
        isFiltered = FALSE;
    }
    else
    {
        isFiltered = true;
        entriesFiltered = [[NSMutableArray alloc] init];
        NSString *queryPart1 = @"SELECT * FROM table WHERE name LIKE '%";
        NSString *queryPart2 = @"'% ORDER BY name";
        NSString *sql = [NSString stringWithFormat:@"%@%@%@", queryPart1, text, queryPart2];
        sqlite3_stmt *statement;

        if(sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil)==SQLITE_OK)
        {
            while (sqlite3_step(statement)==SQLITE_ROW) {

                char *field2 = (char *) sqlite3_column_text(statement,1);
                NSString *field2Str = [[NSString alloc]initWithUTF8String:field2];

                NSString *str = [[NSString alloc]initWithFormat:@"%@", field2Str];


                [entriesFiltered addObject:str ];

            }
            sqlite3_finalize(statement);
        }
    }

    [self.theTable reloadData];
}

以下是表格视图的代码

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    //return the number of sections.
    return 1;
}

-(NSInteger)tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger)section
{
    //Return the number of rows in the section
    if(isFiltered){
        return [entriesFiltered count];
    } else {
        return [entries count];
    }


}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    //UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    //Congigure the cell...
    if(isFiltered){
        cell.textLabel.text = [entriesFiltered objectAtIndex:indexPath.row];
        return cell;
    } else {
        cell.textLabel.text = [entries objectAtIndex:indexPath.row];
        return cell;
    }

}

#pragma mark - Table view delegate

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{


}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

   NSIndexPath *indexPath = [self.theTable indexPathForSelectedRow];
   NSLog(@" indexPath row %ld",(long)indexPath.row);
   speakerViewController *svc = [segue destinationViewController];
   svc.labelText = descriptions[indexPath.row];
   svc.url = urls[indexPath.row];

}

问题是sql查询搜索?搜索数组而不是查询数据库会更好吗?如果是这样我怎么做?

非常感谢任何帮助。

0 个答案:

没有答案