为什么我的UITableView会出现无限循环?

时间:2011-10-17 21:50:07

标签: iphone objective-c cocoa-touch loops

我正在调用一个方法,在视图加载时选择表视图的第一行。但出于某种原因,在调用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 个答案:

答案 0 :(得分:1)

这是未经证实的,但我敢打赌,当您从selectRowAtIndexPath:animated:scrollPosition:致电selectFirstRow时,它会调用UITableView代表的-tableView:numberOfRowsInSection:

基本上,你有无限的递归。 tableView:numberOfRowsInSection拨打selectFirstRow,呼叫selectRowAtIndexPath:animated:scrollPosition:,无限地拨打tableView:numberOfRowsInSection

您需要将selectFirstRow来电转移到viewDidAppearviewWillAppeartableView: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?");
}

这样的干/模块/清洁更多。