UIImagePickerController Camera Source导致应用程序崩溃

时间:2010-07-31 10:07:35

标签: iphone camera uiimagepickercontroller

当我使用UIImagePickerControllerSourceTypeCamera时,我收到“已收到内存警告。级别= 1”。

如果我在进入应用程序后立即访问摄像头,我会收到“已接收内存警告。级别= 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");
      }

  }

2 个答案:

答案 0 :(得分:0)

EXC_BAD_ACCESS通常与泄漏相反:过度释放的对象。保留计数的对象已降为0,但您仍然在某处保持指向它的指针。一旦访问此指针,您可能会收到EXC_BAD_ACCESS或其他奇怪的行为。

还有其他可能性。它只是意味着你试图访问你不拥有的内存。

在你的情况下,这不一定与UIImagePickerController有关。选择器的呈现只会导致发布内存警告,并且响应此警告,您的应用程序会在各个不同的位置释放内存。我的猜测是,这些对象中至少有一个之前已经被释放过,现在是一个悬空指针。

要调试它,您应该尝试NSZombieEnabled。有关发现此类错误的进一步帮助,请参阅此问题:EXC_BAD_ACCESS signal received

P.S。:您应该在搜索EXC_BAD_ACCESS

时找到它

答案 1 :(得分:0)

这是因为UIImagePicker解雇了你的ViewDidUnload。 这样所有的实例都变成了僵尸。 因此,处理这个问题的方向是 “为什么UIImagePicker”触发了ViewDidUnload。

我遇到了同样的问题,但还没有找到解决方案。