我一直在玩我的应用程序表视图的搜索工具一段时间,现在试图让它工作但我在控制台中一直收到同样的错误。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' [NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance
我相信以下部分可能是我尝试在if语句中传递一些NSLog条目的问题,它似乎通过它但问题是当我点击搜索栏并开始输入时,第一个字母I类型调用错误并取消我的应用程序。
问题出在哪里
在视图中将显示“食物”数组初始化如下:
NSString *myDBnew =@"/Users/taxsmart/Documents/rw3app.sql";
database = [[Sqlite alloc] init];
[database open:myDBnew];
NSString *quer = [NSString stringWithFormat:@"Select category from foodcat"];
Food = [database executeQuery:quer];
//[database executeNonQuery:quer];
[database close];
遇到错误的搜索栏委托方法:
(void) searchTableView
{
NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
// [searchArray addObjectsFromArray:Food];
for(NSDictionary *dictionary in Food)
{
NSString temp1 = [dictionary objectForKey:@"category"];
[searchArray addObject:temp1];
}
for (NSString *sTemp in searchArray)
{
NSLog(@"Value: %@",NSStringFromClass([sTemp class]));
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0)
[copyListOfItems addObject:sTemp];
}
[searchArray release];
searchArray = nil;
}
我该怎么办?
请帮助。
请建议
由于
答案 0 :(得分:0)
似乎您的dataArray中有一个NSDictionary。 添加
NSLog(@"%@",NSStringFromClass([description class]]));
查看dataArray包含的类。
答案 1 :(得分:0)
看起来数据库查询(Food)的结果是包含字典的字典。这段代码:
for(NSDictionary *dictionary in Food)
{
NSString temp1 = [dictionary objectForKey:@"category"];
[searchArray addObject:temp1];
}
可以替换为:
for(NSDictionary *dictionary in Food)
{
NSObject *ob = [dictionary objectForKey:@"category"];
if([ob isKindOfClass: [NSString class]])
{
[searchArray addObject:ob];
}
else if([ob isKindOfClass: [NSDictionary class]])
{
NSDictonary *dic1 = (NSDictionary*)ob;
// ... at this point you can get the string for desired dictionary key
// or you can ignore it
}
}
使用此代码,我们可以确保只将字符串放入searchArray。
如果你想对所需的键'类别'进行完整的树解析,那么你应该做一些递归函数来搜索字典。
您可以将Food变量转储到控制台,以查看哪个叶子实际上是您要查找的结果。把断点放到控制台类型'po Food'。