每当我旋转屏幕上有UITableView
时,我就会看到这种情况发生。我发现它发生在willRotate
中的didRotate
和UIViewController
方法调用之间。我的同事也在其他地方看到了它,通常是在旋转周围。它直到最近才开始发生,我们对如何应对它感到困惑(谷歌搜索不会以错误的形式显示错误消息)。有没有其他人遇到过这个知道如何应对的事情?
答案 0 :(得分:35)
(决定从评论中取出这个并作为答案,因为我认为这是一个很好的答案:)
哈!我也有NaN计算(div0)。密钥调试辅助:有问题的消息由NSLog()输出,因此在NSLog()上设置断点并观察操作系统当时正在做什么。对我来说,这是myUISlider.value = NaN。
设置断点:
XCode 3.x
XCode 4.x
XCode 5.x - 7.1(至少) (与4.x相同,断点导航器除外,现在是CMD-7。)
运行应用程序,在NSLog上查看它中断,检查堆栈跟踪。
答案 1 :(得分:26)
我发现了问题。
当您重置tableview
的帧时,它会为表中的每一行调用委托方法tableView:heightForRowAtIndexPath:
,以便在需要时重新计算其内容大小。那时,我们做了一些特殊的处理以返回高度,并且由于我们的代码中的一些错误的假设,我们错误地返回NaN
由于零除错误(我们除以的变量假设永远不会零)。确保我们不将零除以此处修复它。
答案 2 :(得分:15)
我花了一天的时间试图找到导致同样问题的代码,并在Xcode中启用“break on exception”后几分钟内解决了。检查this tutorial以了解如何启用它。
答案 3 :(得分:12)
当我被认为:
时,我遇到了这个问题 tableView:heightForHeaderInSection:
返回NSInteger
,但会返回CGFloat
...
变化:
-(NSInteger)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
到
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
解决了我的问题。
编辑:
在某些时候我弄清楚计算机是如何工作在C级以下的,所以我想我会分享它...(我将使用x86_64中的寄存器名称,因为我最熟悉它们,ARM会略有不同但是类似)
int f(){
float someFloat=5.0f;
return someFloat;
}
导致将someFloat
的值转换为整数类型,然后将其复制到特定寄存器:%rax
然后调用返回指令。
float f(){
float someFloat=5.0f;
return someFloat;
}
导致将someFloat
的值从当前位置复制到特定寄存器:%xmm0
然后调用返回指令。
因此,如果你有错误的原型,调用代码会期望值在错误的位置,你最终会返回一个垃圾值。
答案 4 :(得分:2)
这个错误也让我花了很长时间 最后,我发现我的同事写了这样的话:
UIEdgeInsets a;
a.left = (...some calculation);
button.imageEdgeInsets = a;
我重写了这些代码并修复了问题:
UIEdgeInsets a;
a.left = (...some calculation);
a.top = 0;
a.bottom = 0;
a.right = 0;
button.imageEdgeInsets = a;
UIEdgeInsets的某些值未正确初始化,有时会变为NaN值,并使应用程序崩溃。
更一般地说,您应该检查C样式结构的所有值是否都已正确初始化。
答案 5 :(得分:0)
答案 6 :(得分:0)
您可以尝试此yourTableview?.bounces = false
。它对我有用。