приложение вылетает без каких-либо сообщений журнала - PullRequest
3 голосов
/ 10 ноября 2011

В моем приложении у меня есть UIViewController, который выдвигается другим навигационным контроллером ViewController.Он содержит некоторые виды, кнопки, scrollViews и поддержку акселерометра.При нажатии кнопки «Назад» на навигационном контроллере приложение вылетает без какого-либо сообщения журнала, кроме этого: «предупреждение: невозможно прочитать символы для /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.3 (8J2) / Symbols / Developer/usr/lib/libXcodeDebuggerSupport.dylib (файл не найден). (gdb) "отладчик связывает меня с этой строкой в ​​main.m:

int retVal = UIApplicationMain(argc, argv, nil, nil);

с" EXEC_BAD_ACCESS ", что это значит?

РЕДАКТИРОВАТЬ: все вы правы.проблема была в акселерометре.Я установил делегат ([UIAccelerometer sharedAccelerometer] .delegate = self;) и не удалил его.вот почему в моем коде не было строки для ссылки на отладчик.Я просто добавил это:

 - (void)viewWillDisappear:(BOOL)animated {
        [UIAccelerometer sharedAccelerometer].delegate = nil;
    }

и проблема исчезла.Поэтому, если вы используете какие-либо функции устройства, будьте осторожны с делегатами.

Ответы [ 4 ]

6 голосов
/ 10 ноября 2011

Вы установили Зомби для включения? Это позволит вам отслеживать доступ к уже освобожденному объекту и сообщать вам, какой это объект.

Если вы используете XCode 4, вы можете включить зомби в Проект -> Редактировать схему -> Диагностика , установив флажок " Включить зомби ".

Также убедитесь, что у вас установлено « Break on Exception » - в XCode 4 перейдите к представлению Breakpoint, нажмите знак «плюс» в левом нижнем углу и выберите «Add Exception Breakpoint» ... " для всех исключений. Тогда XCode сломается в точке, где происходит исключение, и вы увидите больше, чем просто UIApplicationMain в качестве местоположения.

1 голос
/ 10 ноября 2011

Полагаю, у вас было предупреждение о памяти, и ваше приложение освободило некоторые данные, которых больше нет, когда вы вернетесь.

Поместите некоторую точку останова в didReceiveMemoryWarning, dealloc, viewDidUnload и viewDidLoad, чтобы увидеть, что происходит в вашем предыдущем контроллере.

1 голос
/ 10 ноября 2011

EXC_ BAD_ ACCESS является исключением (EXCeption_ BAD_ ACCESS).

Если вы установите точку останова на objc_exception_throw (знак + в левом нижнем углу вкладки отладки), вы получите ее.

Возможно, вы захотите взглянуть на NSZombieEnabled (http://www.cocoadev.com/index.pl?NSZombieEnabled),, поскольку вы, вероятно, пытаетесь получить доступ к объекту dealloc'd.

1 голос
/ 10 ноября 2011

Это означает, что вы пытались читать / записывать блок памяти, к которому у вас нет разрешения. Возможно, вы пытаетесь использовать объект, который не был выделен / инициализирован. Проверьте ваш код, отладьте его и проверьте переменные, чтобы найти решение.

...