我在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
答案 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行