TableView UISearchBar на панели вкладок контроллер падает при поиске - PullRequest
0 голосов
/ 12 ноября 2010

Я какое-то время пытался найти средство поиска для своего представления таблицы приложений, теперь пытаюсь заставить его работать, но я продолжаю получать ту же ошибку в своей консоли.

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ' [NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance

Я полагаю, что в следующем разделе может быть проблема, которую я пытался передать некоторым записям NSLog внутри оператора if, и кажется, что он проходит через него, но проблема в том, когда я нажимаю на строку поиска и начинаю вводить первую букву Itype вызывает ошибку и отменяет мое приложение.

Вот где проблема:

В поле зрения появится «Еда» Массив инициализируется, как показано ниже:

 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 голосов
/ 18 ноября 2010

Похоже, что результатом запроса к базе данных (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'.

0 голосов
/ 12 ноября 2010

Появляется, что в вашем dataArray есть NSDictionary. Добавить

NSLog(@"%@",NSStringFromClass([description class]])); 

Чтобы увидеть, какие классы содержит ваш dataArray.

...