2013-02-16 4 views
6

Я вижу много потоков здесь о том, как решить код EXC_BAD_ACCESS = 2, и, как представляется, консенсус заключается в том, что я пытаюсь получить доступ к моему массиву или к объекту в мой массив после того, как я уже выпустил его. Я вижу, что в большинстве случаев решения выглядят так, что в их коде слишком много [releaseObject]. Проблема для меня в том, что у меня нет вызовов для выпуска, потому что я использую ARC.Как отлаживать код EXC_BAD_ACCESS = 2 при использовании ARC

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

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

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

После включения Zombies приложение по-прежнему строит и запускает без ошибок, но теперь он вылетает, как только появляется симулятор, и теперь XCode теперь переключается на Навигатор отладки под Протектором 1, там перечислены более 100 000 записей и каждый из которых вы нажимаете, показывает некоторые вещи в главном окне, которые я не знаю, что означает.

Итак, что мне теперь делать? Я включил Zombies и снова запустил, я вижу кучу вещей на экране, но не знаю, как сделать головы или хвосты. Я попытался опубликовать снимок экрана, но у меня пока нет полномочий делать это.

+0

Нам нужен код, который сможет помочь. Не забудьте включить код в строку EXC_BAD_ACCESS. С ARC многие ошибки, связанные с памятью, автоматически обрабатываются ARC, поскольку он выделяет и выпускает и не задерживает перевыпуск. Сказав это, в зависимости от логики кода это может произойти. Поэтому, пожалуйста, отправьте код. – Spectravideo328

+0

Добавлена ​​учетная запись github, в которой есть весь проект. Теперь вы можете видеть все. См. Его здесь: https://github.com/jonathan3087/Matchismo – jonathan3087

ответ

18

Я просмотрел ваш исходный код и нашел проблему. Вы пытаетесь установить свойство numberOfMatchingCards на self.game, пока вы находитесь в середине ленивой загрузки game, создавая бесконечный цикл. Ваш self.game.numberOfMatchingCards собирается попытаться загрузить новую игру, так как вы еще не закончили создание экземпляра игры к моменту, когда вы вызываете ваш сеттер. Просто измените

- (IBAction)cardModeChanged:(UISegmentedControl *)sender { 
    switch ([sender selectedSegmentIndex]) { 
     case 0: 
      self.game.numberOfMatchingCards = 2; 
      break; 
     case 1: 
      self.game.numberOfMatchingCards = 3; 
      break; 
     default: 
      self.game.numberOfMatchingCards = 2; 
      break; 
    } 
} 

в

- (IBAction)cardModeChanged:(UISegmentedControl *)sender { 
    switch ([sender selectedSegmentIndex]) { 
     case 0: 
      _game.numberOfMatchingCards = 2; 
      break; 
     case 1: 
      _game.numberOfMatchingCards = 3; 
      break; 
     default: 
      _game.numberOfMatchingCards = 2; 
      break; 
    } 
} 

Я не уверен, что это решит вашу проблему плохого доступа, но это является причиной многих записей в отладочный навигатора. Дайте мне знать, если у вас по-прежнему возникает проблема с доступом, после исправления. Важно помнить, что, хотя вы используете ARC, объекты все равно освобождаются (когда их количество ссылок падает до нуля).

+0

Это устранило проблему, я больше не получаю бесконечный цикл, который вызывает множество записей в навигаторе отладки, точно так же, как вы сказали. Я также разрешил проблему EXC_BAD_ACCESS. Итак, теперь я получаю чистую сборку и запускаю с предупреждениями без ошибок. Спасибо, что посмотрели на это, я вытаскивал волосы. – jonathan3087

+0

Не проблема. Рад, что все работает! – enjayem