选项卡栏控制器上的TableView UISearchBar在搜索时崩溃

时间:2010-11-12 12:55:23

标签: iphone objective-c cocoa-touch ios4 uisearchbar

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

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;
}

我该怎么办?

请帮助。

请建议

由于

2 个答案:

答案 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'。