popViewControllerAnimated: YES вылетает из моего приложения - PullRequest
0 голосов
/ 09 ноября 2010

Мое приложение аварийно завершает работу, когда я выполняю [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 ]

2 голосов
/ 30 декабря 2011
myviewcontroller = [[[MyViewController alloc]init]autorelease];
[self.navigationController pushViewController:myviewcontroller animated:YES];
[myviewcontroller release]; //This is my bug !!!  I just fixed it.
1 голос
/ 09 ноября 2010

Да, я считаю, что Дерек указывает вам правильное направление.Не могли бы вы перечислить, какие операции с памятью вы выполняете на активном контроллере перед отправкой этого сообщения о выпуске (сообщение о выпуске отправляется неявно, когда вы пытаетесь его извлечь).Пожалуйста, уточните, используете ли вы автоматический выпуск для этого контроллера и т. Д. Также может быть полезно узнать, какие связанные свойства могут быть связаны с этим контроллером (например, @property (nonatomic, retain и т. Д.)) если таковые имеются.

1 голос
/ 09 ноября 2010

Обычно это означает, что вы отправляете сообщение освобожденному объекту, что является плохой идеей.

Из стека видно, что он отправляет сообщение об освобождении объекта. Я бы предположил, что объект уже был выпущен и, следовательно, имеет счетчик 0. Поэтому дальнейшее освобождение будет недействительным.

Я полагаю, что если вы включите флаг, я думаю, это называется обнаружением зомби или что-то в этом роде, то любое сообщение освобожденному объекту будет генерировать более описательное сообщение.

Возможно, сюда придет более опытный разработчик с более подробной информацией.

...