2010-07-31 2 views
0

При получении UIImagePickerControllerSourceTypeCamera я получаю сообщение «Предупреждение о принимаемой памяти. Уровень = 1».UIImagePickerController Camera Source, приводящий к сбою приложения

Если я сразу же зашел в камеру после ввода приложения, я получаю сообщение «Предупреждение о принимаемой памяти. Level = 1», но когда я выбираю параметр камеры после доступа ко всем другим функциям приложения, приложение падает во время консоли отладчика отображает

Предупреждение о наличии памяти. Уровень = 1
Полученный сигнал программы: «EXC_BAD_ACCESS».

Почему это происходит? При создании и анализе я не получаю уведомления о утечке памяти.

if(actionSheet.tag == 1){ 
     addButton.enabled = YES; 
     UIImagePickerController * picker = [[[UIImagePickerController alloc] init] autorelease]; 
     picker.delegate = self; 

     if (buttonIndex == 0) 
     { 

     NSLog(@"selecting camera"); 
     picker.sourceType = UIImagePickerControllerSourceTypeCamera; 

     [self presentModalViewController:picker animated:YES]; 
     } 
     else if (buttonIndex == 1){ 

      NSLog(@"choosing album"); 
      picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
      [self presentModalViewController:picker animated:YES]; 
     } 
     else 
     { 
      //NSLog(@"cancel"); 
     } 

    } 

ответ

0

EXC_BAD_ACCESS обычно является противоположностью утечки: перевыпущенный объект. Объект, который удерживает count, упал до 0, но вы все еще держите указатель на него где-то. После доступа к этому указателю вы можете получить EXC_BAD_ACCESS или другое странное поведение.

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

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

Чтобы отладить это, вы должны попробовать NSZombieEnabled. Смотрите этот вопрос для дальнейшей помощи в поиске такого рода ошибки: EXC_BAD_ACCESS signal received

P.S .: Вы должны были найти его при поиске для EXC_BAD_ACCESS

+0

Я использовал функцию зомби с помощью инструментов, а также с помощью NSZOmbieEnabled. Он не уведомил меня. Чтобы быть более конкретным, у меня есть два разных контроллера представлений, один диспетчер представлений имеет uiimagepicker, а другой имеет «текст». Я также заметил, что я получаю сигнал EXC_BAD_ACCESS только после того, как переключусь с контроллера текстового представления на контроллер представления UIImagepicker. Я не получаю сигнал плохого доступа, когда я начинаю с контроллера UIImagepicker. – Praveen

+0

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

0

Это происходит потому, что UIImagePicker выпустили свой ViewDidUnload. Чтобы весь экземпляр стал зомби. Следовательно, направление обработки этой проблемы - «Почему UIImagePicker» вызвал ViewDidUnload.

У меня такая же проблема, и пока не могу найти решение.