打開相冊莫名其妙崩潰

  • 我打開了,獲取僵尸對象,報的錯是PUUIImageViewController retain.

#pragma mark 修改頭像
- (void)avatarChangeOnClicked {
    UIAlertController *alterController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    UIAlertAction *cameraAction = [UIAlertAction actionWithTitle:@"相機(jī)" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self openCamera];
    }];
    UIAlertAction *albumAction = [UIAlertAction actionWithTitle:@"相冊" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self openAlbum];
    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }];
    [alterController addAction:cameraAction];
    [alterController addAction:albumAction];
    [alterController addAction:cancelAction];
    [self presentViewController:alterController animated:YES completion:nil];
}

- (void)openCamera {
    [self openImagePickerController:UIImagePickerControllerSourceTypeCamera];
}

- (void)openAlbum {
    // 如果想自己寫一個圖片選擇控制器,得利用AssetsLibrary.framework,利用這個框架可以獲得手機(jī)上的所有相冊圖片
    // UIImagePickerControllerSourceTypePhotoLibrary > UIImagePickerControllerSourceTypeSavedPhotosAlbum
    [self openImagePickerController:UIImagePickerControllerSourceTypePhotoLibrary];
}

- (void)openImagePickerController:(UIImagePickerControllerSourceType)type {

    if (![UIImagePickerController isSourceTypeAvailable:type]) return;

    if (type == UIImagePickerControllerSourceTypeCamera) {
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

            if ([[AVCaptureDevice class] respondsToSelector:@selector(authorizationStatusForMediaType:)]) {
                AVAuthorizationStatus authorizationStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
                if (authorizationStatus == AVAuthorizationStatusRestricted
                    || authorizationStatus == AVAuthorizationStatusDenied) {

                    // 沒有權(quán)限
                    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
                                                                        message:@"沒有權(quán)限訪問相機(jī),您可以在 (設(shè)置 > 隱私 > 相機(jī))打開應(yīng)用訪問權(quán)限,即可自定義圖片!"
                                                                       delegate:nil
                                                              cancelButtonTitle:@"OK"
                                                              otherButtonTitles:nil];
                    [alertView show];
                    return;
                }
            }
        }
    }

    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    ipc.delegate = self;
    ipc.allowsEditing = YES;
    ipc.sourceType = type;
    [self presentViewController:ipc animated:YES completion:nil];
}

#pragma mark - UIImagePickerControllerDelegate
/**
 * 從UIImagePickerController選擇完圖片后就調(diào)用(拍照完畢或者選擇相冊圖片完畢)
 */
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    /*
     ==<PUUIAlbumListViewController: 0x1360eae00>
     ==<PUUIPhotosAlbumViewController: 0x135a3a000>
     ==<PUUIImageViewController: 0x137574330>
     -[PUUIImageViewController retain]
     */
    for (UIViewController *vc in [picker viewControllers]) {
        Class class = NSClassFromString(@"PUUIImageViewController");
        if ([vc isKindOfClass:class]) {
            [self addChildViewController:vc];
        }
    }

    [picker dismissViewControllerAnimated:YES completion:nil];
    // info中就包含了選擇的圖片
    UIImage *editImage = info[UIImagePickerControllerEditedImage];
    self.avatarImageView.image = editImage;
    // 上傳頭像
    [self avatarChangeFromImage:editImage];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
     [picker dismissViewControllerAnimated:YES completion:nil];
}


參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.OC里用到集合類是什么? 基本類型為:NSArray,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,471評論 0 3
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理。運行時機(jī)制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,116評論 0 12
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,590評論 0 6
  • 迎接一個嬰兒的降生,對于一個家庭來說本來是一件幸福的事情,但是卻發(fā)生榆林產(chǎn)婦請求剖腹不成跳樓的悲?。怀绦騿T蘇享茂憑...
    趣讀書吧閱讀 1,380評論 0 0
  • 共享充電寶這個項目會成為新的紅海嗎?最近惹人爭議,連國民老公王思聰都現(xiàn)身說法,要能成功,他吃翔。 從用戶角度我先談...
    郝晶讀書會閱讀 865評論 1 7

友情鏈接更多精彩內(nèi)容