Ios4 UIImageView在尝试设置帧时崩溃

Ios4 UIImageView在尝试设置帧时崩溃,ios4,uiview,uiimageview,Ios4,Uiview,Uiimageview,首先,这是我的事故日志: 线程0崩溃: 0 libSystem.B.dylib 0x35176264\uu kill+8 1 libSystem.B.dylib 0x35176254 kill+4 2 libSystem.B.dylib 0x35176246提升+10 3 libSystem.B.dylib 0x3518ad02中止+50 4 libstdc++.6.dylib 0x31432a20\uu gnu\u cxx::\uu verbose\u terminate\u handler(

首先,这是我的事故日志:

线程0崩溃:
0 libSystem.B.dylib 0x35176264\uu kill+8
1 libSystem.B.dylib 0x35176254 kill+4
2 libSystem.B.dylib 0x35176246提升+10
3 libSystem.B.dylib 0x3518ad02中止+50
4 libstdc++.6.dylib 0x31432a20\uu gnu\u cxx::\uu verbose\u terminate\u handler()+376
5 libobjc.A.dylib 0x31a97594_objc_terminate+104
6 libstdc++.6.dylib 0x31430df2_cxxabiv1::_终止(void(*)()+46
7 libstdc++.6.dylib 0x31430e46 std::terminate()+10
8 libstdc++.6.dylib 0x31430f16\uuucxa\uthrow+78
9 libobjc.A.dylib 0x31a964c4 objc_异常_抛出+64
10 CoreFoundation 0x361857c2+[N异常提升:格式:参数:][62
11 CoreFoundation 0x361857fc+[N异常提升:格式:][28
12夸脱芯0x3148b222 CALayerSetPosition(CALayer*,CA::Vec2常量和布尔)+134
13夸脱芯0x3148b190-[CALayer设置位置:+32
14夸脱芯0x3148b0dc-[CALayer设置框:+384
15 UIKit 0x35d15aba-[UIView(几何)设置帧:][182
16 UIKit 0x35d15928-[UIImageView设置帧:+96

我从崩溃日志中复制了一部分。第16行之后是我的课程,我不能在这里介绍。在MyClass和MyMethod中,我更改了imageView的框架。我的问题是我不能复制这个bug,我想复制它。是什么原因导致此日志?我试图在调用setFrame:之前释放imageView,但它没有产生此错误。
有什么办法吗?或者为什么有时会发生这种错误?

我从自己的一个项目中发现了这个问题。通常当
setFrame:
崩溃时,是因为您试图设置一个NaN(而不是一个数字)。我不知道你以前是否和NaN打过交道,但如果你没有发表评论,我会提供如何处理的信息

编辑:有点时间,我想我可以给你举个例子

所以这里有一个代码示例来解释为什么这个bug很难重现,以及如何修复它。我不知道你的代码是什么样子的,但是你的问题听起来很相似,让我相信你犯了和我一样的错误

考虑以下代码:

- (void)layoutSubviews {
    CGRect imageFrame;
    switch (self.state) {
        case 0:
            imageFrame = CGRectMake(0, 0, 100, 100);
        case 1:
            imageFrame = CGRectMake(10, 10, 50, 50);
    }
    self.imageView.frame = imageFrame;
}
假设
self.state
为2,则
imageFrame
将永远不会初始化,并且将包含该内存位置上的任何内容,可能是NaN。这很难重现的原因是,只有在该内存位置上存在NaN时才会发生崩溃


在我的示例中,错误很容易发现,而且很可能在代码中也不容易发现。如果你自己找不到,请随意发布你的代码,我来看看。如果您有任何问题,请毫不犹豫地发表评论。

如果没有看到任何代码,很难判断。然而,如果它不可复制,我会说它可能是一个记忆问题。检查您是否正确管理了所有保留计数。用仪器测试应用程序是否存在漏洞也可能很有用。如果你不能像你说的那样复制代码,那么除了崩溃日志之外,很难帮助你解决问题。首先检查如何设置
UIImageView的框架,然后从那里向后操作。这很糟糕,因为我试图强制取消分配imageView,应用程序在setFrame:崩溃,但没有使用此日志。为什么在此日志中出现[NSException raise:format:]?你们知道吗?