2014-02-05 100 views
4

我想使用UIImagePickerController让我的用户选择照片或拍照以在我的应用中使用。但是,每当从他们的照片中选择图像或者他们选择使用拍摄的照片时,该应用程序似乎大部分时间都会崩溃。我用NSZombie对象,我得到这个消息:使用UIImagePickerController时iOS 7崩溃BAD_ACCESS

[NSISRestrictedToNonNegativeVariable保留]:消息发送到释放实例0x168c3530

我不知道是怎么回事。当我偶尔呈现模态视图时,也出现了同样的问题。

这里是我呈现的UIImagePickerController和处理响应代码:

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
    { 
     if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqualToString:CANCEL_TITLE]) { 
      return; 
     } 
     UIImagePickerControllerSourceType sourceType = buttonIndex == 0 ? UIImagePickerControllerSourceTypePhotoLibrary : UIImagePickerControllerSourceTypeCamera; 
     UIImagePickerController* controller = [[UIImagePickerController alloc] init]; 
     controller.sourceType = sourceType; 
     [controller setDelegate:self]; 
     if (buttonIndex == 1) { 
      //PNCoverOverlayView* overlayView = [PNCoverOverlayView viewWithNibNamed:nil]; 
      //[controller setCameraOverlayView:overlayView]; 
      [controller setShowsCameraControls:YES]; 
     } 
     [self presentViewController:controller animated:YES completion:nil]; 
    } 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    { 
     [picker dismissViewControllerAnimated:YES completion:^{ 
      UIImage* originalImage = info[UIImagePickerControllerOriginalImage]; 
      _imageToUpload = originalImage; 
      CGFloat scaleAdjust = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) ? 0.5 : 1; 
      CGFloat length = LENGTH * scaleAdjust; 
      if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) { 
       PNCoverOverlayView* overlay = (PNCoverOverlayView*)[picker cameraOverlayView]; 
       CGSize overlaySize = [overlay frame].size; 
       UIImage* cropped = [UIImage imageCroppedToSize:overlaySize fromImage:originalImage]; 
       _imageToUpload =[UIImage imageResizedToSize:CGSizeMake(length, length) fromImage:cropped]; 
      } else { 
       _imageToUpload = [UIImage imageScaledToMaximumLength:length fromImage:originalImage]; 
      } 
      [self performSegueWithIdentifier:@"reviewPhotoUpload" sender:self]; 
     }]; 
    } 

我注释掉添加自定义覆盖到的UIImagePickerController,因为固定的应用呈现的UIImagePickerController

+1

您的问题是否解决? – NeverHopeless

+0

否我的问题没有解决 – user3072533

+0

遇到同样的问题,仍然没有找到解决方法。 –

回答

0

你当崩溃应检查以下几件事:

  1. 你在设备上测试它吗?

  2. 按照Overviewthis apple guideline中提到的步骤操作,并照顾您正在运行的设备。例如,iPhone或iPad的 。

  3. 也检查isSourceTypeAvailable

  4. 另外,检查isCameraDeviceAvailable属性。

  5. 当试图获得cameraOverlayView时,您应该检查它是否不是nil。有关更多 信息,请参阅此属性的文档。

希望它有帮助!

0

您实例在功能控制器:

UIImagePickerController* controller = [[UIImagePickerController alloc] init];

你应该保持一个强大的参考类控制器,伊娃将是一个不错的选择。

+0

只要没有被解雇,你并不需要保持一个强大的参考,因为你立刻呈现控制器并被'presentController'保留。所有选择器回调也在被解雇之前完成。 – Rivera