Поиск массивов объектов с помощью NSPredicate - PullRequest
0 голосов
/ 23 февраля 2012
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {

    [displayItems removeAllObjects];  //clear array to ensure no repeat info
    if ([searchText length] == 0) {
        displayItems = (NSMutableArray *)allItems;
    }
    else {
        //search by item category
        NSPredicate *catPredicate = [NSPredicate predicateWithFormat:@"category   
            CONTAINS[cd] %@",searchText];
        [searchable filterUsingPredicate:catPredicate];
        //further search by item name
        NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd]
            %@",searchText];
        [searchable filterUsingPredicate:namePredicate];

        displayItems = searchable;
        searchable = (NSMutableArray *)allItems;
    }
    [self.searchResults reloadData];
}

Этот метод является частью простого табличного представления с возможностью поиска, которое я пытаюсь создать для более крупного проекта. Мой код компилируется и запускается, и когда я что-то набираю в строке поиска, кажется, что функция поиска работает, но затем программа падает, как только набирается вторая буква. Если я набираю две буквы подряд, выдается 'NSInvalidArgumentException', причина: '- [_ NSArrayI filterUsingPredicate:]: нераспознанный селектор, отправленный экземпляру 0x6d6c040' , но если я наберу одну букву и затем нажмите Enter или Backspace, он выдает этого парня 'NSInvalidArgumentException', причина: '- [ _NSArrayI removeAllObjects]: нераспознанный селектор, отправленный экземпляру 0x6a7f300' , когда я набираю вторую букву.

Я довольно новичок в объективе-c, и это меня озадачило. Любая помощь, которую я мог бы получить, будет принята с благодарностью ....: - / Все еще возникают проблемы с момента обновления.

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

"Нельзя просто привести NSArray к NSMutableArray и затем вызвать для него методы NSMutableArray" - Боромир

Вместо этого создайте изменяемую копию, например:

searchable = [allItems mutableCopy];

ПРИМЕЧАНИЕ. По окончании работы с ним обязательно отключите функцию поиска.

0 голосов
/ 23 февраля 2012

Вы должны использовать NSMutableArray для вызова методов.

NSArray имеет метод «FilterArrayusingPredicate».

Простое решение - использовать NSMutableArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...