popViewControllerAnimated:YES崩溃我的应用程序

时间:2010-11-09 03:11:41

标签: iphone uinavigationcontroller crash

当我执行[self.navigationController popViewControllerAnimated:YES]时,我的应用程序崩溃。

它在设备上比在模拟器上崩溃更多。请建议如何解决这个问题?

Date/Time:       2010-11-09 10:51:41.325 +0800
OS Version:      iPhone OS 4.0.1 (8A306)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                0x0000286e objc_msgSend + 18
1   CoreFoundation                 0x00002c30 -[NSObject(NSObject) release] + 24
2   libobjc.A.dylib                0x00003c1a objc_setProperty + 114
3   UIKit                          0x000693d4 -[UINavigationController setDisappearingViewController:] + 24
4   UIKit                          0x0007d5c0 -[UINavigationController _clearLastOperation] + 40
5   UIKit                          0x0007d4b4 -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] + 556
6   UIKit                          0x0007d248 -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:] + 204
7   UIKit                          0x0007d0b6 -[UINavigationTransitionView _navigationTransitionDidStop] + 450
8   UIKit                          0x00059974 -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 184
9   UIKit                          0x0005987e -[UIViewAnimationState animationDidStop:finished:] + 34
10  QuartzCore                     0x000127ba run_animation_callbacks(double, void*) + 286
11  QuartzCore                     0x0001265c CA::timer_callback(__CFRunLoopTimer*, void*) + 116
12  CoreFoundation                 0x00071a54 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
13  CoreFoundation                 0x00073ede __CFRunLoopDoTimer + 854
14  CoreFoundation                 0x0007485e __CFRunLoopRun + 1082
15  CoreFoundation                 0x0001d8e4 CFRunLoopRunSpecific + 224
16  CoreFoundation                 0x0001d7ec CFRunLoopRunInMode + 52
17  GraphicsServices               0x000036e8 GSEventRunModal + 108
18  GraphicsServices               0x00003794 GSEventRun + 56
19  UIKit                          0x000062a0 -[UIApplication _run] + 396
20  UIKit                          0x00004e10 UIApplicationMain + 664
21  tenpay                         0x00006124 main (main.m:13)
22  tenpay                         0x00002324 start + 44

3 个答案:

答案 0 :(得分:2)

myviewcontroller = [[[MyViewController alloc]init]autorelease];
[self.navigationController pushViewController:myviewcontroller animated:YES];
[myviewcontroller release]; //This is my bug !!!  I just fixed it.

答案 1 :(得分:1)

这通常意味着您正在向已发布的对象发送消息,这是个坏主意。

从堆栈中可以看到它正在向对象发送释放消息。我建议该对象已被释放,因此保留计数为0.因此,进一步释放将无效。

我相信如果你打开一个标志,我认为它被称为僵尸检测或类似的东西,那么任何发布对象的消息都会产生更具描述性的信息。

也许更有经验的开发人员可以在这里了解更多细节。

答案 2 :(得分:1)

是的,我相信德里克指出了你正确的方向。您是否可以在发送此版本消息之前列出您在活动控制器上执行的与内存相关的操作类型(当您尝试将其弹出时,将隐式发送释放消息)。请澄清您是否正在为此控制器使用自动释放等...此外,查看您可能与此控制器关联的相关属性可能会有所帮助(例如:@property(nonatomic,retain等...) )如果有的话。