Приложение ipad падает на новой iOS 4.1.2, но работает на 3.2 - PullRequest
1 голос
/ 19 января 2011

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

Приложение отлично работает на ipad 3.2, но на 4.2 и т. Д. Оно вылетает.В журнале написано, что я выпускаю что-то, что я не выделяю.Я проверил свой код сто раз, и я ничего такого не делаю.

В любом случае, он работает на симуляторе и на устройстве (оба 3.2)

есть идеи?

РЕДАКТИРОВАТЬ:

<Error>: df(7903,0x3e3d7898) malloc: *** error for object 0x1a11b0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Wed Jan 19 20:35:38 unknown UIKitApplication:com..imagazine[0x9c7c][7903]                         <Notice>: def(7903,0x3e3d7898) malloc: *** error for object 0x1a11b0: pointer being           freed was not allocated
 Wed Jan 19 20:35:38 unknown UIKitApplication:com.imagazine[0x9c7c][7903] <Notice>: *** set a breakpoint in malloc_error_break to debug
   Wed Jan 19 20:35:39 unknown ReportCrash[7905] <Notice>: Formulating crash report for process df[7903]
  Wed Jan 19 20:35:39 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.imagazine[0x9c7c]) Job appears to have crashed: Abort trap
  Wed Jan 19 20:35:39 unknown SpringBoard[27] <Warning>: Application 'df' exited abnormally with signal 6: Abort trap
  Wed Jan 19 20:35:39 unknown ReportCrash[7905] <Error>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/df_2011-01-19-203538_Sumas-iPad.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0

РЕШЕНИЕ:

Прежде всего используйте NSZombies, и вы будете ловить такие ошибки.

Проблема: у меня была настройка таймера для каждого0,2 секунды, и он очищал UIView и выделял его не каждые 0,2 секунды, а, возможно, один раз каждые 5 секунд.Я сделал стандартную проверку:

  if(vewCustom!= nil) {
      [vewCustom removeFromSuperView];
      [vewCustom release];
      vewCustom = nil;
   }

Но странным было то, что я проверял код сотни раз, и у меня не было проблем с его выпуском или каким-либо образом, он работал на iOS4.2 для iPhone.

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

Странно, но было бы хорошо, если бы кто-то мог объяснить, что я делал неправильно.

Ответы [ 3 ]

1 голос
/ 19 января 2011

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

http://iosdevelopertips.com/debugging/tracking-down-exc_bad_access-errors-with-nszombieenabled.html

1 голос
/ 05 сентября 2012

Просто заметил это, когда искал что-то еще. Причина сбоя заключается в том, что removeFromSuperview заставляет суперпредставление освободить представление. Таким образом, последующая версия является избыточной (избыточная версия). Не будет проблемой с ARC, но может вызвать путаницу в других ситуациях

1 голос
/ 19 января 2011

Предположим, что журнал верен. Самый простой способ найти его - включить зомби, а затем тщательно выполнить приложение. Смотрите здесь (совет № 1):

http://loufranco.com/blog/files/debugging-memory-iphone.html

Еще одна вещь, которую нужно сделать - это Build and Analyze и смотреть на каждую вещь, которую она помечает По моему опыту очень мало ложных срабатываний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...