Возникли проблемы с UISearchBar в UITableViewController - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь добавить UISearchBar в свой UITableView.

Это метод, который они используют для поиска:

- (void) searchTableView {

NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];

for (NSDictionary *dictionary in listOfItems)
{
NSArray *array = [dictionary objectForKey:@"Countries"];
[searchArray addObjectsFromArray:array];
}

for (NSString *sTemp in searchArray)
{
NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

if (titleResultsRange.length > 0)
[copyListOfItems addObject:sTemp];
}

[searchArray release];
searchArray = nil;
}

Но у меня нет словаря, я просто хочудля поиска в моем массиве 'exercArray', который является init следующим образом:

NSString *path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"];
NSMutableArray *rootLevel = [[NSMutableArray alloc]initWithContentsOfFile:path];
self.exerciseArray = rootLevel;
[rootLevel release];

Когда я NSLog его, я получаю:

exerciseArray: (
        {
        exerciseName = "Balance Board";
    },
        {
        exerciseName = "Barbell Seated Calf Raise";
    },
        {
        exerciseName = "Calf Press On The Leg Press Machine";
    },
        {
        exerciseName = "Calf Raises- With Bands";
    },

Так что любой может помочь мне изменить метод поиска дляподходит массив у меня?Кажется, в нем есть ключ.

Я пробовал это, но оно не работало и вылетало на линии NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

с ошибкой *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary rangeOfString:options:]: unrecognized selector sent to instance 0x2d6450

- (void) searchTableView {

    NSString *searchText = searchBar.text;
    NSLog(@"exerciseArray: %@", exerciseArray);
    for (NSString *sTemp in listOfItems)
    {
        if (sTemp) {
            NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

            if (titleResultsRange.length > 0)
                [copyListOfItems addObject:sTemp];
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 02 марта 2013

Для поиска в табличном виде я пробовал это, и у меня есть успех, надеюсь, это поможет вам ......

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    self.searching=NO;
    NSString *originalString;
    [self.filteredProductArray removeAllObjects];
    for (int i=0; i<self.exerciseArray.count; i++)
    {
        originalString=[[[self.exerciseArray objectAtIndex:i] objectForKey:@"exerciseName"] lowercaseString];
        if (!([originalString rangeOfString:[searchText lowercaseString]].location==NSNotFound))
        {
            [self.filteredProductArray addObject:[self.exerciseArray objectAtIndex:i]];
        }
    }
    if ([searchText isEqual:@""])
    {
        self.searching=NO;
    }
    [self.tableView reloadData];
}
0 голосов
/ 02 марта 2013

Я считаю, что NSPredicates - хороший способ поиска в массивах. Вы можете обратиться к этой ссылке. Использование NSPredicate для фильтрации NSArray на основе ключей NSDictionary

0 голосов
/ 13 декабря 2011

Похоже, у вас есть массив словарей с одной парой ключ / значение в каждом словаре (упражнение имя).поэтому для вашего набора данных это должно быть так:

for (NSDictionary *dictionary in exerciseArray)
{
    NSArray *array = [dictionary objectForKey:@"exerciseName"];
    [searchArray addObjectsFromArray:array];
}
...

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

...