Inf*_*ies 4 uiview uiimageview ios4
首先是我的崩溃日志:
线程0
崩溃:0 libSystem.B.dylib 0x35176264 __kill + 8
1 libSystem.B.dylib 0x35176254 kill + 4
2 libSystem.B.dylib 0x35176246 raise + 10
3 libSystem.B.dylib 0x3518ad02 abort + 50
4 libstdc ++.6.dylib 0x31432a20 __gnu_cxx :: __ verbose_terminate_handler()+ 376
5 libobjc.A.dylib 0x31a97594 _objc_terminate + 104
6 libstdc ++.6.dylib 0x31430df2 _cxxabiv1 :: _terminate(void(*)())+ 46
7 libstdc ++.6.dylib 0x31430e46 std: :terminate()+ 10
8 libstdc ++.6.dylib 0x31430f16 __cxa_throw + 78
9 libobjc.A.dylib 0x31a964c4 objc_exception_throw + 64
10 CoreFoundation 0x361857c2 + [NSException raise:format:arguments:] + 62
11 CoreFoundation 0x361857fc + [NSException raise:format :] + 28
12 QuartzCore 0x3148b222 CALayerSetPosition(CALayer*,CA :: Vec2 const&,bool)+ 134
13 QuartzCore 0x3148b190 - [CALayer setPosition:] + 32
14 QuartzCore 0x3148b0dc - [CALayer setFrame:] + 384
15 UIKit 0x35d15aba - [UIView (几何)setFrame:] + 182
16 UIKit 0x35d15928 - [UIImageView setFrame:] + 96
我从崩溃日志中复制了一个部件.第16行之后有我的课程,我不能在这里介绍.在MyClass和MyMethod中,我更改了imageView的框架.我的问题是我无法重现这个错误,我想重现它.是什么导致这个日志?我在调用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;
}
Run Code Online (Sandbox Code Playgroud)
考虑self.state是2,然后imageFrame将永远不会被初始化并将包含该内存位置上的任何内容,可能是NaN.难以重现的原因是只有在该内存位置上有NaN时才会发生崩溃.
在我的示例中,错误很容易发现,并且很可能在代码中发现它并不容易.如果您自己找不到,请随时发布您的代码,我会看看它.如果您有任何疑问,请随时发表评论.
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |