Как зациклить мои поиски в iPhone Dev? - PullRequest
0 голосов
/ 15 октября 2010

Мои цели - это строка поиска над моей таблицей, которая ищет track_tiles в словаре.Эта таблица была построена в результате анализа данных в NSDictionary.Мой словарь для таблицы выглядит так ...

tracksDict:  {
    "Cold Calling" =     (
        "<Track: 0x5f39bc0>",
        "<Track: 0x5f3a3e0>",
        "<Track: 0x5f3a990>",
        "<Track: 0x5f3ae80>"
    );
    "Gate Keeper" =     (
        "<Track: 0x5f3b3e0>",
        "<Track: 0x5f3b980>",
        "<Track: 0x5f3bed0>"
    );
    "Hot Calling" =     (
        "<Track: 0x5f3c390>"
    );
}

Ниже приведена моя попытка создания searchTable ...

- (void) searchTableView {

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

    searchArray = listOfItems;
    NSLog(@"Sorted: %@", searchArray);

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"track_title contains %@", searchText];  
    [searchArray filterUsingPredicate:predicate];  
    [copyListOfItems addObjectsFromArray:searchArray];

    [searchArray release];
    searchArray = nil;
}

Я выяснил, как использовать NSPredicate для поиска в треке.track_title.Но если я удаляю свой текущий поиск (изменяю searchText), то происходит сбой.

Например, , если я ищу "pro".Новый массив copyListOfItems является правильным.С двумя предметами в моем массиве.Но если бы я удалил «о» в про или нажал «поиск», он вылетал.Мне нужен какой-то цикл, который решает эту проблему.Пожалуйста и спасибо.

1 Ответ

0 голосов
/ 15 октября 2010

Во-первых, неясно, что именно вы ищете, поэтому, пожалуйста, продумайте свой вопрос и попробуйте перефразировать его более четко.

Во-вторых, неясно, как должен работать ваш механизм поиска.Является ли copyListOfItems переменной экземпляра (в этом контексте свойством «self»)?Как насчет listOfItems?Как вы управляете памятью для этих свойств?Вы правильно помечаете свой интерфейс для обновления?

В-третьих, похоже, что вам не хватает некоторых базовых концепций управления памятью.Вы выделяете / инициализируете изменяемый массив и присваиваете его вашему массиву searchArray, а затем указываете на searchArray какой-то другой объект с именем listOfItems, тем самым пропуская изменяемый массив, который вы только что выделяли / init'd в предыдущей строке.Вы не перечислили специфику своего сбоя (например, конкретный сигнал и любую информацию отладки).Без этой информации трудно сказать.

Если бы мне пришлось угадывать, я бы сказал, что вы переиздаваете listOfItems, поскольку вы указываете на него searchArray, а затем выпускаете его через [searchArray release].К тому времени, когда ваш пользовательский интерфейс попытается прочитать его для обновления таблицы, он исчезнет.

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