我正在调用一个方法,在视图加载时选择表视图的第一行。但出于某种原因,在调用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];
}
答案 0 :(得分:1)
这是未经证实的,但我敢打赌,当您从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?");
}
这样的干/模块/清洁更多。