EXC_BAD_ACCESS в устройстве, а не в симуляторе - PullRequest
5 голосов
/ 10 февраля 2012

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

- (UIViewController *)viewControllerForPresentingModalView {
{
  return self;
}

Я использовал это в своих предыдущих проектах ... так как мой window.rootvviewcontroller был только для себя. Но в моем текущем проекте есть много экранов, на которых я показываю рекламу, поэтому я использовал:

- (UIViewController *)viewControllerForPresentingModalView {
    {
      return return [[(AppDelegate *)[[UIApplication sharedApplication] delegate] window] rootViewController] ;;
    }

Основная проблема заключается в том, что программа аварийно завершала работу. Сначала все было хорошо: тестовая реклама iads загружалась, но она редко вылетала. Я скоро понимаю, что это из-за Admob . Он редко падал, потому что рекламные объявления не загружались большую часть времени.

Теперь, ища эти сбои, я натолкнулся на мысль, что, поскольку я сделал проект в Xcode 4.2, а не в моих предыдущих проектах Xcode 4.0, в моем окне и контроллере представления были сильные атрибуты. Я удалил это.

Теперь проблема в симуляторе, он не вылетает, а вылетает в устройстве.

Ошибка возникает после того, как я добавил объявление в качестве подпредставления и - (UIViewController *)viewControllerForPresentingModalView прошел через эту функцию , но до adWhirlDidReceiveAd метода.

Фактический сбой [GADRequestPrivate spamSignals] EXC_BAD_ACCESS.

Ответы [ 3 ]

1 голос
/ 19 февраля 2012

Ниже ответ уже заработал награду за меня :) ..... вы можете попробовать для вашей проблемы ...

Ссылка: Как добраться до сути аварии

Я нашел один из лучших способов отладки кода для Crash.Перейдите по ссылке для техники отладки:

http://www.cocoadev.com/index.pl?DebuggingAutorelease

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

0 голосов
/ 24 февраля 2012

Даже если это происходит в собственном коде Adwhirl, вы можете многому научиться, включив все флаги отладки, как указано, например, в Как использовать __NSAutoreleaseNoPool . В этом ответе обсуждается множество флагов отладки, а не только пулы авто-выпуска.

0 голосов
/ 10 февраля 2012

Я рекомендую вам проанализировать ваш проект и найти утечки памяти и зомби. Похоже, вы отправляете сообщение освобожденному объекту, что вызывает недопустимый доступ к памяти. Обнаружение зомби не может быть запущено на устройстве, но вы можете запустить его на симуляторе. Взгляните на Xcode Instruments - Включить обнаружение NSZombie? Где это?

Надеюсь, это поможет.

...