Проблема: прокрутка табличного представления, а затем выберите панель поиска (iphone) - PullRequest
0 голосов
/ 25 февраля 2011

Я застрял с этой проблемой в течение нескольких часов, и я не вижу света.Пожалуйста, помогите мне с этим:

У меня есть таблица и панель поиска.Панель поиска находится на панели навигации.Когда я делаю быструю прокрутку табличного представления, если я выбираю панель поиска, пока табличное представление все еще замедляется, возникает исключение:

Завершение приложения из-за необработанного исключения«NSRangeException», причина: « - [NSMutableArray objectAtIndex:]: индекс 31 за пределами для пустого массива»

Как программно остановить замедление просмотра таблицы?

Спасибо за ваше время!

Ответы [ 2 ]

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

Исправить ошибку довольно сложно, не имея фрагмента кода. Кроме того, из этой ошибки я думаю, что после прокрутки табличного представления и выбора панели поиска в это время вы обнуляете массив или удаляете все объекты изit.

Глядя на ошибку, кажется, что при выборе приложения Terminating SearchBar из-за необработанного исключения 'NSRangeException' причина: '- [NSMutableArray objectAtIndex:]: индекс 31 за пределами для пустого массива'

  • (BOOL) searchBarShouldBeginEditing: (UISearchBar *) searchBar;

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

Итак, я предлагаю вам взять два разных массива, один из которых у вас есть с полными записями, а затем другой для результата поиска и затем перезагрузитьтаблица с использованием массива.

вы избавитесьЭта ошибка наверняка. В противном случае постарайтесь убедиться, что вы не удаляете все объекты из массива, пока поиск не будет завершен.

Эту логику вы можете использовать для поиска.:)

  • (void) searchBar: (UISearchBar *) theSearchBar textDidChange: (NSString *) searchText {

    // Сначала удалить все объекты.copyListOfItems = [[NSMutableArray alloc] init];[copyListOfItems removeAllObjects];

    if ([длина searchText]> 0) {

    searching = YES;
    tblView.scrollEnabled = YES;
    NSString *searchText = searchBar.text;
    NSLog(@"%@",searchText);
    NSMutableArray *searchArray = [[NSMutableArray alloc] init];
    
    for (NSMutableDictionary *dictionary in YourMainArray)
    {
        NSRange titleResultsRange = [[dictionary valueForKey:@"English"] rangeOfString:searchText options:NSCaseInsensitiveSearch];
    
        if (titleResultsRange.length > 0)
            [copyListOfItems addObject:dictionary];
    }
    
    [searchArray release];
    searchArray = nil;
    

    } else {

    searching = NO;
    tblView.scrollEnabled = YES;
    [searchBar resignFirstResponder];
    

    }

    [tblView reloadData];}

...