проблема с кэшированием iphone - UISearchbar - PullRequest
0 голосов
/ 25 января 2011

У меня есть приложение, которое использует динамический поиск вперед с использованием UISearchBar

Вот что он делает .. У меня есть 2 просмотра;A (Список) и B (Подробно)

В представлении A у меня есть UISearchBar, где пользователь может вводить что угодно, и список ниже обновляется динамически (использует скопированные массивы), то есть из API внешнего веб-сервиса

Скажем, сценарий, пользователь должен набрать "WORD", он начнет с W, поэтому в списке появятся "WA", "WB", "WC", "WD" и т. Д. Теперь он наберет 2-ю букву O(таким образом, поисковый термин теперь называется «WO»). Таким образом, в списке будут отображаться «WO1», «WO2», «WO3» и т. д.

В тот момент, когда пользователь набрал WO, и он нажимает на один из вариантов вв списке говорится, что WO2, он будет подробно рассказывать о WO2. Он оттуда кликает ... Итак, ему снова показывают WO1, WO2, WO3, ...

Теперь вот мой вопрос ... еслитеперь он нажимает на WO1, хотя в списке отображаются WO1, WO2, WO3, ... он знаком с деталями "WA" (т. е. первым элементом в предыдущем списке (т.е. во время ввода 'W')только)

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

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

1 Ответ

0 голосов
/ 25 января 2011

Пожалуйста, предоставьте код для источника данных основного списка и для источника данных UISearchDisplayController.

Кажется, что в tableView:didSelectRowAtIndexPath: вы получаете неправильный объект и отправляете его в контроллер деталей.

В любом случае, вы должны переключаться между tableViews в вашем контроллере представления списка, чтобы получить правильный объект для indexPath:

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    if (aTableView == self.searchDisplayController.searchResultsTableView) 
    {
        //  configure cell for object from filtered by keyword list
    }
    else
    {
        //  configure cell for object from unfiltered list
    }   
}

- (void)tabeView:(UITableVIew *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath];
    // get object according to cell and push it to details controller
}
...