приложение вылетает без каких-либо сообщений в журнале

В моем приложении у меня есть UIViewController, который нажимается другим навигационным контроллером ViewController. Он содержит несколько представлений, кнопок, scrollViews и поддержку акселерометра. Когда я нажимаю кнопку «Назад» в navigationController, приложение вылетает без каких-либо сообщений в журнале, кроме этого: «предупреждение: невозможно прочитать символы для /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", что это значит?

EDIT: вы все правы. проблема была в акселерометре. Я установил делегата ([UIAccelerometer sharedAccelerometer].delegate = self;) и не удалял его. вот почему в моем коде не было строки, на которую мог бы ссылаться отладчик. Я только что добавил это:

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

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


person SentineL    schedule 10.11.2011    source источник


Ответы (4)


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

person Daniel Albert    schedule 10.11.2011
comment
Спасибо за ответ. Это обычная ссылка на строчку, где я ее использовал. но на этот раз этого не произошло. Может быть, я не совсем ясно выразился в своем вопросе: что я мог использовать, чтобы это не связывало меня ни с одной строкой в ​​моем коде? PS прости мой бедный эндлиш - person SentineL; 10.11.2011
comment
Разработка в Objective-C и Xcode немного разочаровывает: когда у вас возникает такая ошибка, вы не знаете трассировку стека и где ошибка. Попробуйте отладить и проверить переменные. - person Daniel Albert; 10.11.2011
comment
Возможно, вы установили атрибут и не сохранили его. Я имею в виду: stackoverflow.com/questions/3375063/ - person Daniel Albert; 10.11.2011

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

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

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

person TheEye    schedule 10.11.2011
comment
Это было невероятно полезно. Спасибо! - person Christoph Winkler; 10.11.2011

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

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

person Oliver    schedule 10.11.2011

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

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

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

person Oliver    schedule 10.11.2011