#iphone #objective-c #ios5
#iPhone #objective-c #ios5
Вопрос:
У нас есть код Objective-C, который отлично работает во всех других версиях iOS, но теперь не работает с iOS5. Ниже приведен раздел сбоя кода, он останавливается в строке setSelectedCell с ‘EXC_BAD_ACCESS’
-(void)viewWillAppear:(BOOL)animated {
Application *app = [Application sharedManager];
[app setSelectedCell:nil deselectedCell:[menuItemTableView
cellForRowAtIndexPath:currentIndexPath]];
}
Как кто-нибудь сталкивался с этой ошибкой? Есть идеи, как исправить?
Спасибо!
Комментарии:
1. Какой тип
sharedManager
?
Ответ №1:
Вероятно, ваша ошибка была в прошлых версиях и теперь просто лучше обнаруживается в iOS5. Самое важное, что нужно понимать об EXC_BAD_ACCESS, это то, что строка, в которой она обнаружена, может иметь или не иметь никакого отношения к коду, который ее вызывает.
Я подробно написал об этом здесь:
http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html
Там также есть советы по отладке, но для подведения итогов
- Выполните сборку и анализ — исправьте все, что видите
- Если вы считаете, что переиздаете, попробуйте включить zombies
- Debug Malloc может привести к возникновению ошибки ближе к причине
Повторюсь, то, что вы не получаете EXC_BAD_ACCESS, не означает, что у вас нет ошибки сбоя памяти — это просто означает, что она не была обнаружена системой подкачки виртуальной памяти / памяти.
Ответ №2:
Я не могу сказать из небольшого кода, который вы вставили, но это может быть проблема с автоматическим подсчетом ссылок (A.R.C.)
http://developer.apple.com/technologies/ios5/
Попробуйте отключить это в настройках сборки.
Ответ №3:
Если menuItemTable выпущен, но не имеет значения nil, это приведет к сбою приложения и выдаст вам EXC_BAD_ACCESS, поскольку вы отправляете сообщение чему-то, что не существует и не равно нулю.