2013-10-04 5 views
9

У меня проблема с Thread 1: EXC_BAD_ACCESS (code = 1, address = 0xf00000c), и я не знаю, как ее разрешить. Он появился, когда я сменил какой-то объект на дату ядра и сохранил его, и я пытаюсь выставить этот контроллер родительскому. Эта ошибка в main() с функцией retVal. здесь некоторый кодТема 1: EXC_BAD_ACCESS (код = 1, адрес = 0xf00000c)

 int retVal; 
    @try { 
     retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
      */\ error is here** 
    } 
    @catch (NSException *exception) { 
     NSLog(@"%@", [exception callStackSymbols]); 
     @throw exception; 
    } 
    return retVal; 

После повторного приложения запущенные все мои изменения в основных данных. Более того, эта проблема относится только к iOS 7. iOS 6.1 в порядке.

У кого-нибудь есть идея, как его решить?

+1

Можете ли вы приложить сюда полную трассировку стека? Маловероятно, что ошибка в 'main()', скорее всего, где-то глубоко в вашем коде. Вы также можете попробовать запустить приложение в Инструментах с шаблоном трассировки «Зомби», который должен помочь вам отследить объект, вызывающий проблемы. –

+7

Я * обещаю * вы, ошибка не в 'main()', это то, где отладчик сбрасывает вас после того, как все остальное раскручивает. – ipmcc

+2

'EXC_BAD_ACCESS' - сложный сбой и не может быть пойман через' @ catch'. – bbum

ответ

12

В комментарии говорится, что эта ошибка, вероятно, будет глубокой в ​​вашем коде. Если виновником является зомби, самый простой способ его найти - запустить его (желательно в последнем Xcode, в настоящее время Xcode 5, как он был улучшен) в профилировщике и выбрать «Zombies». Когда он терпит неудачу, вы можете увидеть историю всего, что произошло с объектом.

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

+0

Профайлер не сообщает, какой объект зомби. Есть ли wmdc, который делает это? –

+0

Он должен сообщить вам с уведомлением, когда он разбивается на зомби. Вы используете Xcode 5? –

14

Я решил эту проблему с помощью "Zombies" и проблема была с [UIScrollView(UIScrollViewInternal) _notifyDidScroll]

Я добавил

- (void)dealloc { 

    self.tableView.delegate = nil; 

} 

Этой проблема была только в прошивке 7.

Спасибо за помощь!

+0

Отлично! Обязательно выберите ответ. –

+0

Что делает scrollview для делегата таблиц. Я запутался – DevilInDisguise

+0

UITableView является подклассом UIScrollView, поэтому UITableViewDelegate наследует также методы UIScrollViewDelegate (т. Е. NotifyDidScroll). –

0

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

С таким огромным количеством переменных класса в фреймворках очень вероятно, что время от времени каждый программист просто по совпадению называет некоторую переменную в своем классе точно так же, как и тот, который используется где-то в классах инфраструктуры. В большинстве случаев это не должно быть ошибкой Xcode.

1

Я разрешаю эту проблему только путем отладки исходного кода и повторного анализа моей логики.

Ниже приведены некоторые рекомендации, которые помогают мне много.

EXC_BAD_ACCESS означает, что сообщение отправлено в точку в памяти, где нет экземпляра класса для его выполнения. Таким образом, «плохой доступ».

Вы получите EXC_BAD_ACCESS в 3-х случаях:

  • Объект не инициализируется
  • Объект уже выпущен
  • Что-то еще, что это не очень вероятно, произойдет

Это уже хорошая отправная точка. Начните использовать отладчик, если вы недавно добавили новый объект в класс, над которым работаете, поместите контрольную точку в строку перед тем, как только что добавленный объект будет использоваться в первый раз, и проверьте значения в отладчике.

Что происходит чаще всего, так это то, что вы будете отправлять сообщение перевыпущенному объекту - то есть объекту, который удален из стека вызовов. В этом случае все (и действительно все), которое вы получите в консоли, будет просто: EXC_BAD_ACCESS

Это потому, что объект ушел, нет информации о том, какой класс он или какой исходный файл или что-то еще.

Более подробную информацию можно найти на сайте here

Пожалуйста, постарайтесь избегать использования зомби для этого.

2

EXC_BAD_ACCESS означает, что для его выполнения нет экземпляра класса.

Есть 2 или больше возможностей:

  1. Объект не инициализируется
  2. Объект уже выпущен

Пожалуйста отлаживать приложения тщательно и анализировать каждый объект тщательно. Это может решить вашу проблему.

0

И может быть еще одна проблема, с которой я столкнулся сегодня: У меня был измененный словарь с попыткой ввода без объекта. Был фрагмент кода с добавлением значения BOOL в словарь. Поэтому неудивительно, что я получил эту ошибку =).

Смежные вопросы