2010-07-31 53 views
0

當我使用UIImagePickerControllerSourceTypeCamera時,出現「接收到的內存警告。級別= 1」。UIImagePickerController Camera Source導致應用程序崩潰

如果我在進入應用程序後立即訪問攝像機,我會收到「接收到的內存警告。級別= 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通常與泄漏相反:過度釋放的對象。保留計數的對象已經下降到0,但你仍然在某個地方持有指向它的指針。一旦你訪問這個指針,你可能會收到EXC_BAD_ACCESS或其他奇怪的行爲。

還有其他的可能性。它只是意味着你試圖訪問內存,你不擁有。

在你的情況下,這不一定與UIImagePickerController有關。選擇器的呈現只會導致發佈內存警告,並且針對此警告,您的應用會在各個不同的位置釋放內存。我的猜測是,這些對象中至少有一個已經被釋放,現在是一個懸掛指針。

要調試這個,你應該嘗試NSZombieEnabled。查看發現這種錯誤的進一步幫助,這個問題:EXC_BAD_ACCESS signal received

P.S:你應該已經發現,搜索時EXC_BAD_ACCESS

+0

我確實使用了使用儀器的殭屍功能,也使用了NSZOmbieEnabled。它沒有通知我。更具體地說,我有兩個不同的視圖控制器,一個視圖控制器具有uiimagepicker,另一個具有「文本」。我還注意到,只有從「文本」視圖控制器切換回UIImagepicker視圖控制器後,纔會收到EXC_BAD_ACCESS信號。當我從UIImagepicker視圖控制器開始時,我沒有收到錯誤的訪問信號。 – Praveen 2010-07-31 23:17:24

+0

那麼它可能不是一個過度對待的對象。你在任何地方都可以使用任何內存嗎?你可以在收到信號的線路上發佈堆棧跟蹤和代碼嗎? – tonklon 2010-08-01 08:14:25

0

這是因爲UIImagePicker解僱你ViewDidUnload。 讓所有的實例成爲殭屍。 因此,處理這個問題的方向是 「爲什麼UIImagePicker」觸發了ViewDidUnload。

我有同樣的問題,並且還找不到解決方案。