我一直在玩我的应用程序表视图的搜索工具一段时间,现在试图让它工作但我在控制台中一直收到同样的错误。
由于未捕获的异常“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];
}
答案 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];
}