将cellForRowAtIndexPath奇怪地跳转到另一个return语句

时间:2011-08-05 15:55:30

标签: iphone xcode debugging if-statement exc-bad-access

我在tableView:cellForRowAtIndexPath:

中有这个
if (condition) {
    // make a custom cell
    return cell;  // line number 240
}
else {
    // make another kind of cell
    return cell;  // line number 256
}

我得到了一个EXC_BAD_ACCESS,所以我启动了调试器并设置了断点,逐行逐步执行代码。

当我从第256行前进“步过”时,它直接进入第240行,即进入if语句的另一个分支。怎么可能???

非常感谢你的帮助,
的Sascha

4 个答案:

答案 0 :(得分:2)

我想我找到了解决方案。具有表视图的视图控制器也是后台Web加载线程的委托。显然,调试器一次只能遍历一个线程。委托例程确实在没有检查上述scrollToRowAtIndexPath:的情况下调用了condition

但是,我发现调试器的行为有点令人费解。

答案 1 :(得分:0)

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath将被调用x次,其中x =行数。

所以我认为你的问题是你的(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section没有返回正确的值,而且很可能是一个比你从中提取数据的值更大的值。

即。如果您有一个大小为3的数组,但尝试制作第4行单元格。

答案 2 :(得分:0)

此方法调用自身的次数与numberOfRowsInSection方法返回的行数相同,而每次单元格为nil 。最有可能的是,控件转到下一行为它分配UITableViewCell,那时,我猜测if条件得到了满足。

答案 3 :(得分:0)

Step Over与Step Into相同,只是当它到达另一个程序的调用时,它不会进入该过程。该过程将运行,您将进入当前过程中的下一个语句。

所以跳过下一个语句和你的cellForRowAtIndexPath调用numberOfRow次。所以在某些迭代中你的if条件变为真,并转到你的第240行