iOS中的自动旋转崩溃

时间:2013-05-10 12:48:56

标签: ios crash auto-rotation

当我更改设备方向时,我正在使用我正在处理的应用程序异常终止(崩溃)。我经常无法重现它(当我旋转的时候不会发生这种情况,假设有机会在0.01%左右),但这是一个严重的问题。我附上了崩溃报告的重要部分。

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x6563616e
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x3233a5b0 objc_msgSend + 16
1   UIKit                           0x36297b82 -[UISectionRowData     refreshWithSection:tableView:tableViewRowData:] + 1546
2   UIKit                           0x3628301e -[UITableViewRowData     rectForFooterInSection:] + 310
3   UIKit                           0x3628358c -[UITableViewRowData heightForTable] + 48
4   UIKit                           0x36283400 -[UITableView(_UITableViewPrivate)         _updateContentSize] + 324
5   UIKit                           0x362cc8b4 -[UITableView _rectChangedWithNewSize:oldSize:] + 252
6   UIKit                           0x362cc544 -[UITableView setFrame:] + 220
7   UIKit                           0x362c59c4 -[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] + 644
8   UIKit                           0x362c572e -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 262
9   UIKit                           0x3644eb2a -[UIScrollView _resizeWithOldSuperviewSize:] + 38
10  CoreFoundation                  0x35b63aec __NSArrayChunkIterate + 360
11  CoreFoundation                  0x35b5ca74 __NSArrayEnumerate + 608
12  CoreFoundation                  0x35abeb66 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 58
13  UIKit                           0x3627e09e -[UIView(Geometry) resizeSubviewsWithOldSize:] + 114
14  UIKit                           0x36263ba2 -[UIView(Geometry) setFrame:] + 414
15  UIKit                           0x362c59c4 -[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] + 644
16  UIKit                           0x362c572e -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 262
17  CoreFoundation                  0x35b63aec __NSArrayChunkIterate + 360
18  CoreFoundation                  0x35b5ca74 __NSArrayEnumerate + 608
19  CoreFoundation                  0x35abeb66 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 58
20  UIKit                           0x3627e09e -[UIView(Geometry) resizeSubviewsWithOldSize:] + 114
21  UIKit                           0x36263ba2 -[UIView(Geometry) setFrame:] + 414
22  UIKit                           0x362a6dc0 -[UIViewControllerWrapperView setFrame:] +     48
23  UIKit                           0x362c59c4 -[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] + 644
24  UIKit                           0x362c572e -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 262
25  CoreFoundation                  0x35b63aec __NSArrayChunkIterate + 360
26  CoreFoundation                  0x35b5ca74 __NSArrayEnumerate + 608
27  CoreFoundation                  0x35abeb66 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 58
28  UIKit                           0x3627e09e -[UIView(Geometry) resizeSubviewsWithOldSize:] + 114
29  UIKit                           0x36263ba2 -[UIView(Geometry) setFrame:] + 414
30  UIKit                           0x362c59c4 -[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] + 644
31  UIKit                           0x362c572e -[UIView(Geometry) _resizeWithOldSuperviewSize:] + 262
32  CoreFoundation                  0x35b63aec __NSArrayChunkIterate + 360
33  CoreFoundation                  0x35b5ca74 __NSArrayEnumerate + 608
34  CoreFoundation                  0x35abeb66 -[NSArray enumerateObjectsWithOptions:usingBlock:] + 58
35  UIKit                           0x3627e09e -[UIView(Geometry) resizeSubviewsWithOldSize:] + 114
36  UIKit                           0x362c64ae -[UIView(Geometry) setBounds:] + 430
37  UIKit                           0x3634ff32 -[UILayoutContainerView setBounds:] + 58
38  UIKit                           0x363edd88 -[UIViewController window:willAnimateRotationToInterfaceOrientation:duration:] + 460
39  UIKit                           0x3630e2b0 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:] + 3616
40  UIKit                           0x3630d482 -[UIWindow _setRotatableClient:toOrientation:updateStatusBar:duration:force:] + 42
41  UIKit                           0x3630d40c -[UIWindow _setRotatableViewOrientation:duration:force:] + 64
42  UIKit                           0x3644317c __57-[UIWindow _updateToInterfaceOrientation:duration:force:]_block_invoke_0 + 100
43  UIKit                           0x362cb676 -[UIWindow _updateToInterfaceOrientation:duration:force:] + 214
44  UIKit                           0x362d4d20 -[UIWindow _updateInterfaceOrientationFromDeviceOrientation:] + 176
45  CoreFoundation                  0x35ab9034 _CFXNotificationPost + 1424
46  Foundation                      0x3721bd8c -[NSNotificationCenter postNotificationName:object:userInfo:] + 68
47  UIKit                           0x36268c60 -[UIDevice setOrientation:animated:] + 292
48  UIKit                           0x362633d6 -[UIApplication handleEvent:withNewEvent:] + 2954
49  UIKit                           0x362626c8 -[UIApplication sendEvent:] + 68
50  UIKit                           0x36262116 _UIApplicationHandleEvent + 6150
51  GraphicsServices                0x318885a0 _PurpleEventCallback + 588
52  GraphicsServices                0x318881ce PurpleEventCallback + 30
53  CoreFoundation                  0x35b3d170 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
54  CoreFoundation                  0x35b3d112 __CFRunLoopDoSource1 + 134
55  CoreFoundation                  0x35b3bf94 __CFRunLoopRun + 1380
56  CoreFoundation                  0x35aaeeb8 CFRunLoopRunSpecific + 352
57  CoreFoundation                  0x35aaed44 CFRunLoopRunInMode + 100
58  GraphicsServices                0x318872e6 GSEventRunModal + 70
59  UIKit                           0x362b62f4 UIApplicationMain + 1116

既不涉及线程活动,也不定制ViewControllers。而且,我正在使用ARC。

我想知道理由的确切原因或在自动旋转发生时会导致崩溃的可能性。

提前致谢...

2 个答案:

答案 0 :(得分:1)

我认为app会向解除分配的对象发送消息。是的,即使您使用ARC,有时也会发生这种情况。要调试它,您需要使用Instruments(Zombies)运行您的应用程序并尝试重现该错误。

答案 1 :(得分:0)

启用Zombies并使用Instruments(Zombies)调试App确实有助于找到错误。但要修复错误或避免将来出现同样的错误非常重要。

在我的代码中,我有一个像这样的实现......

- (void)someMethod {

    [self.navigationController pushViewController:[DestinationViewController new] animated:YES];

}

我们没有直接持有DestinationViewController的强引用。但是改变......

@property (strong, nonatomic) DestinationViewController *dvc;

// ....

- (void)someMethod {

    self.dvc = [DestinationViewController new];        

    [self.navigationController pushViewController:self.dvc animated:YES];

}

帮助避免了这个错误。我无法解释为什么...... ???但我希望更改设备方向可以解除DestinationViewController,但可以通过保持强引用来避免这种情况。