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 照片但出现错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Photos Foundation 在 iOS 系统图库中获取视频 URL?
UIImagePickerController从拍照图库相册获取图片
颤振:“失去与设备的连接。”第二次使用 image_picker 从 iOS 上的图库中选择照片
Xamarin - 是不是有与适用于 Android 的 Photokit (iOS) 类似的框架,或者是获取图库中所有图像的文件流的好方法?