TableView UISearchBar在搜索时崩溃

时间:2011-09-19 08:30:21

标签: uitableview nsmutablearray uisearchbar nsmutabledictionary

我一直在玩我的应用程序表视图的搜索工具一段时间,现在试图让它工作但我在控制台中一直收到同样的错误。

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'[NSCFDictionary rangeOfString:options:]:无法识别的选择器已发送到实例

DataSource是一个从字典中获取itz值的数组.... 和tableData将存储将在表格中显示的数据。 问: 假设我有一个包含5个值的字典,每个字符都有与这些值对应的不同键。然后我将该字典放入数组中。该数组可以用作搜索的数据源吗?我在cellForRowAtIndexPath中使用相同的数组来显示我的单元格数据。

Plz建议使用代码段。

这是我的textDidChange代码

    -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
    {   
        [tableData removeAllObjects];// remove all data that belongs to previous search

        if([searchText isEqualToString:@""]){
            searchText==nil;
            [tableview reloadData];     
            return;     
        }

        NSInteger counter = 0;  
        for(NSString *name in dataSource)       
        {       
            NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];      
            NSRange r = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];        
            if(r.location != NSNotFound)            
            {           
                if(r.location== 0)//that is we are checking only the start of the names.                
                {               
                    [tableData addObject:name];             
                }           
            }       
            counter++;      
            [pool release];     
        }   
        [tableview reloadData]; 
    }

1 个答案:

答案 0 :(得分:0)

尝试附加条件......

    if([searchText isEqualToString:@""] || searchText == nil){
    }

让我知道,这对你有用吗?

如果dataSource是你的NSMutableArray ....

    for (int i = 0; i < [dataSource count]; i++)
    {
        NSMutableDictionary *temp = (NSMutableDictionary*) [dataSource objectAtIndex:i];
        NSString *name = [NSString stringWithFormat:@"%@", [temp valueForKey:@"name"]];
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];      
        NSRange r = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];        
        if(r.location != NSNotFound)            
        {           
            if(r.location== 0)//that is we are checking only the start of the names.                
            {               
                [tableData addObject:name];             
            }           
        }       
        counter++;      
        [pool release];
    }