iOS 应用程序 - 尝试从图库中获取 iOS 照片但出现错误

Posted

技术标签:

【中文标题】iOS 应用程序 - 尝试从图库中获取 iOS 照片但出现错误【英文标题】:iOS App - Trying to Get iOS photo from gallery but getting an error 【发布时间】:2015-04-30 06:47:20 【问题描述】:

我是 ios 编码的新手,所以我提前道歉。我知道这个话题已经被讨论过很多次(我搜索过)但是我似乎无法解决我的问题,这就是我发帖的原因。

我正在尝试访问 iOS 照片库,但我不断收到两个错误:

一个是 “应用程序试图在目标上呈现一个零模式视图控制器。”

编辑:上述错误已通过在 ChooseExsisting 中初始化 _picker 得到修复,正如 cmets 中所建议的那样。

另一个

[CameraController ChooseExsiting:]: 无法识别的选择器发送到实例 0x157e11330'

我的代码如下:

- (IBAction)ChooseExsiting 
UIImagePickerController *pickerController = [[UIImagePickerController alloc]
                                             init];
pickerController.delegate = self;
[self.picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:_picker animated:YES completion:NULL]; 

我想我的 ChooseExsisting 代码不正确。有人有什么建议吗?我将不胜感激。

【问题讨论】:

请告诉您您在 iOS 模拟器或设备上的运行情况。 你的模拟器中没有照片...照片库所以它给出了这个错误..根据我的意见。 在我的设备上运行,它有很多照片。更改第一个回复建议更改的内容(初始化选择器)后,我收到此错误: 【参考方案1】:

在您的 ChooseExisting 方法中,您将控制器实例化为一个局部变量,然后使用可能为 nil 的 _picker 属性变量调用 present。从局部变量中显示控制器或像 TakePhoto 方法一样初始化属性。

编辑:至于第二部分,例如,如果您将 IBAction 连接到情节提要中的 Tap 处理程序,则您的两个 IBAction 都有错误的方法签名。它们应该如下所示:

- (IBAction) TakePhoto:(id)sender

- (IBAction) ChooseExsiting:(id)sender

【讨论】:

谢谢!但是,我遇到了另一个错误... [CameraController ChooseExsiting:]: unrecognized selector sent to instance 0x157e11330' 我搜索了它,但答案很模糊。有什么想法吗? 我假设您将该方法绑定到 Storyboard 中的点击处理程序。在这种情况下,您的方法必须具有这样的签名:ChooseExsiting:(id)sender - 您缺少参数 很高兴能帮上忙。如果您对解决方案感到满意,请标记为正确答案。【参考方案2】:

将您的 ChooseExisitng 方法更改为以下一种:

- (IBAction)ChooseExsiting:(id) sender 
    UIImagePickerController *pickerController = [[UIImagePickerController alloc]
                                         init];
    pickerController.delegate = self;
    [pickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [self presentViewController:pickerController animated:YES completion:NULL]; 

- (IBAction)ChooseExsiting:(id) sender 
    self.picker = [[UIImagePickerController alloc]
                                         init];
    self.picker.delegate = self;
    [self.picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [self presentViewController:self.picker animated:YES completion:NULL]; 

【讨论】:

不幸的是,两者都崩溃并出现错误:'NSInvalidArgumentException',原因:'-[CameraController ChooseExsiting:]: unrecognized selector sent to instance 0x13fe0fca0' 更新了我的代码。您如何创建 ChooseExisiting 方法?你能在上面贴一些代码吗?你的 TakePhoto 方法有效吗?【参考方案3】:
 You can try this . It work for me
 Follow below three steps1.First of all you need to add below delegate in .h file (UIImagePickerControllerDelegate,UIPickerViewDelegate)
 2.Add below three methods in your controller
 3. On button click call below methods
 here choose photo for open gallary. so on button click call choose photo method
 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

   CGSize newSize=CGSizeMake(150, 150);
   UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [[info objectForKey:UIImagePickerControllerEditedImage] drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   img_profile_pic.image = newImage;
   [self dismissViewControllerAnimated:YES completion:nil];
   isProfilePic=TRUE;

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType

    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.allowsEditing = YES;
    imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
    imagePickerController.sourceType = sourceType;
    imagePickerController.delegate = self;
    imagePickerController = imagePickerController;
    [self presentViewController:imagePickerController animated:YES completion:nil];
 

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


  -(void) takePhoto
       [self showImagePickerForSourceType:UIImagePickerControllerSourceTypeCamera];
   
  -(void) choosePhoto
     [self showImagePickerForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
   

【讨论】:

【参考方案4】:

而不是做



    if ([UIImagePickerController isSourceTypeAvailable:!UIImagePickerControllerSourceTypeCamera]) 

    self.picker = [[UIImagePickerController alloc] init];
    self.picker.delegate = self;
    [self.picker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [self presentViewController:_picker animated:YES completion:NULL];
     

你应该这样做



    if ([UIImagePickerController isSourceTypeAvailable:!UIImagePickerControllerSourceTypeCamera]) 
    if(!_picker)
    _picker = [[UIImagePickerController alloc] init];
    _picker.delegate = self;
    [_picker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [self presentViewController:_picker animated:YES completion:NULL];

    else

    [self presentViewController:_picker animated:YES completion:NULL];

    

您应该在呈现之前初始化 _picker 属性,现在您正在尝试初始化 VC 的本地属性,或者您也可以在代码中呈现 self.picker 而不是 _picker。

【讨论】:

以上是关于iOS 应用程序 - 尝试从图库中获取 iOS 照片但出现错误的主要内容,如果未能解决你的问题,请参考以下文章

从图库访问图像并在 iOS 应用程序库中显示

如何使用 Photos Foundation 在 iOS 系统图库中获取视频 URL?

UIImagePickerController从拍照图库相册获取图片

iOS:从网址下载视频并保存在图库中......?

颤振:“失去与设备的连接。”第二次使用 image_picker 从 iOS 上的图库中选择照片

Xamarin - 是不是有与适用于 Android 的 Photokit (iOS) 类似的框架,或者是获取图库中所有图像的文件流的好方法?