iOS 7使用UIImagePickerController时出现BAD_ACCESS错误

4
我正在尝试使用UIImagePickerController让我的用户选择照片或拍摄照片来在我的应用程序中使用。但是,每当用户从他们的照片中选择一张图片或选择使用拍摄的照片时,应用程序似乎大多数情况下都会崩溃。我使用了NSZombie对象,并得到了这个消息:
[NSISRestrictedToNonNegativeVariable retain]: message sent to deallocated instance 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
不,我的问题还没有解决。 - user3072533
遇到了相同的问题,仍然没有找到解决方法。 - Dmitry Kurilo
2个回答

0
你应该检查以下几点:
  1. 你是在设备上测试吗?

  2. 按照this苹果指南中“概览”下面的步骤,并注意您正在运行的设备,例如iPhone或iPad。

  3. 还要检查isSourceTypeAvailable

  4. 另外,检查isCameraDeviceAvailable属性。

  5. 当尝试获取cameraOverlayView时,应该检查它是否不是nil。有关此属性的详细信息,请参阅文档。

希望能对你有所帮助!


0

你正在函数中实例化控制器:

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

你应该在类中保持对控制器的强引用,一个实例变量是个不错的选择。


你不需要保持强引用,因为你立即呈现控制器并且只要它没有被解散,就会被presentingController保留。所有的选择器回调在解散之前都会被执行。 - Rivera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接