Помощь в отладке приложения для iPhone - EXC_BAD_ACCESS - PullRequest
2 голосов
/ 08 января 2010

Я разработал свое приложение, используя мое устройство 3G для тестирования. Передав это другу для тестирования, он заметил, что он вылетает ... Я посмотрел журнал сбоев, но он не очень полезен, за исключением оператора "EXC_BAD_ACCESS" после нескольких предупреждений памяти.

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

На устройстве моего друга (также 3G) после пары выбранных изображений с камеры приложение вылетает.

Итак, мой вопрос: я думаю что-то освобождается из-за предупреждения о памяти - но только на устройстве моего друга, а затем после освобождения оно пытается снова использоваться. Как я могу узнать, какой объект вызывается? Я не могу использовать NSZombies, потому что это удаленное (бета) устройство.

Помогите пожалуйста!

Также, если у кого-то есть идеи, почему мое устройство может без проблем выбирать изображение за изображением, а его нет ... это было бы очень полезно

Спасибо!

РЕДАКТИРОВАТЬ: новое обнаружение .. Я тоже получаю это сообщение об ошибке: KERN_PROTECTION_FAILURE, которое, как я понимаю, связано с доступом к данным. Сбой, кажется, происходит сразу после сохранения изображения, полученного из UIImagePicker. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 08 января 2010

Возможно, вы что-то переиздали. Если вы используете Snow Leopard, запустите Static Analyzer (Cmd-Shift-A) и найдите ошибки памяти.

Тот факт, что происходит сбой после ошибки памяти, свидетельствует о том, что UIViewController выпустил свой вид. У вас есть какие-либо контроллеры UIViewController, которые наблюдают за NSNotification, или иначе могли бы изменить их IBOutlets, пока они находятся вне экрана? Это частая причина такого рода аварии. Убедитесь, что вы правильно управляете памятью своих IBOutlets . UIViewControllers никогда не должны связываться со своими IBOutlets (или их компонентами UI вообще), когда они находятся вне экрана. Даже если вы не совершите эту ошибку, если вы не реализуете вещи, как указано в приведенной выше ссылке, вы все равно можете потерпеть крах после предупреждений памяти.

MemoryWarning была довольно хорошей идеей, и ситуация улучшилась, но Apple до сих пор не решает все проблемы, связанные с UIViewController. Разработчик все еще должен быть очень осторожным.

0 голосов
/ 08 января 2010

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

...