当sourceType是照片库

时间:2015-11-12 04:23:33

标签: ios objective-c delegates uiimagepickercontroller photolibrary

我遇到一个问题,当使用sourceType = UIImagePickerControllerSourceTypePhotoLibrary时,没有调用UIImagePickerController的委托。

奇怪的是,它在相机模式下工作得很好。

接口声明:

@interface ChatVC : UIViewController <UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate>

并在实施中:

- (void)takePhotoAction {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        UIImagePickerController* imgPickerController = [[UIImagePickerController alloc] init];
        imgPickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
        imgPickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
        imgPickerController.allowsEditing = YES;

        imgPickerController.delegate = self;

        [self presentViewController:imgPickerController animated:YES completion:nil];
    }
}

- (void)choosePhotoFromLibraryAction {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

        UIImagePickerController* imgPickerController = [[UIImagePickerController alloc] init];
        imgPickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imgPickerController.allowsEditing = YES;

        imgPickerController.delegate = self;

        [self presentViewController:imgPickerController animated:YES completion:nil];
    }
}

这是同一个视图控制器中的委托方法实现:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary<NSString *,id> *)editingInfo {
    NSLog(@"Image Picker Controller Picked Image - Deprecated");
    [picker dismissViewControllerAnimated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSLog(@"Image Picker Controller Picked Image");    
    [picker dismissViewControllerAnimated:YES completion:nil];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    NSLog(@"Image Picker Controller Cancelled");
    [picker dismissViewControllerAnimated:YES completion:nil];
}

在相机模式下打开时,一切正常,我可以看到调用适当的委托方法。

但是当在照片库模式下打开并且我选择了照片时,没有任何反应并且没有调用委托方法。但是,我可以看到-imagePickerControllerDidCancel:当我点击取消按钮时调用委托方法。

我甚至怀疑内存警告会以某种方式使代表无效,但事实并非如此。

有人帮我解决这个问题。

提前致谢!

0 个答案:

没有答案