簡體   English   中英

使用UIImagePickerController時,iOS 7會崩潰BAD_ACCESS

[英]iOS 7 crashes BAD_ACCESS when using UIImagePickerController

我正在嘗試使用UIImagePickerController讓我的用戶選擇照片或拍照以在我的應用中使用。 但是,無論何時從照片中選擇圖像或選擇使用照片,應用程序似乎都會崩潰。 我使用了NSZombie對象並收到此消息:

[NSISRestrictedToNonNegativeVariable retain]:消息發送到解除分配的實例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. 你在設備上測試嗎?

  2. 按照蘋果指南中Overview中提到的步驟操作,並注意您運行的設備。 例如,iPhone或iPad。

  3. 檢查isSourceTypeAvailable也。

  4. 另外,檢查isCameraDeviceAvailable屬性。

  5. 在嘗試獲取cameraOverlayView時 ,您應該檢查它是否nil 有關更多信息,請參閱此屬性的文檔。

希望能幫助到你!

您正在函數中實例化控制器:

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

你應該對你班上的控制器有一個強有力的參考,一個ivar將是一個很好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM