Почему я получаю бесконечный цикл с моим UITableView? - PullRequest
1 голос
/ 18 октября 2011

Я вызываю метод, который выбирает первую строку табличного представления при загрузке представления. Но по какой-то причине после вызова selectFirstRow он возвращается к self.couldNotLoadData = NO и продолжает идти вперед и назад. Есть идеи почему? Когда начальный цикл if / else переходит к else, этот метод не вызывается, поэтому он не продолжает цикл.

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
{
    if (self.ichronoAppointments.count > 0)
    {
        self.couldNotLoadData = NO;
        [self selectFirstRow];
        return self.ichronoAppointments.count;
    }
    else
    {
        self.couldNotLoadData = YES;
        return 1;
    }
}
-(void)selectFirstRow 
{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
}

1 Ответ

1 голос
/ 18 октября 2011

Это не подтверждено, но держу пари, что когда вы звоните selectRowAtIndexPath:animated:scrollPosition: из selectFirstRow, он вызывает UITableView делегата -tableView:numberOfRowsInSection:.

По сути, у вас бесконечная рекурсия. tableView:numberOfRowsInSection звонит selectFirstRow, звонит selectRowAtIndexPath:animated:scrollPosition:, звонит tableView:numberOfRowsInSection до бесконечности.

Вам необходимо перевести selectFirstRow звонок на viewDidAppear или viewWillAppear. tableView:numberOfRowsInSection: не место для выполнения чего-либо сложного ... это называется ОЧЕНЬ ОЧЕНЬ часто.

И пока вы это делаете, переместите логику, которая проверяет количество элементов, в selectFirstRow. т.е.

if (self.ichronoAppointments.count) {
    //select the first row
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
} else {
    //don't
    NSLog(@"Couldn't select first row. Maybe the data is not yet loaded?");
}

Таким образом, он более СУХОЙ / модульный / чище.

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