UIImagePickerController和照片库访问

问题描述 投票:0回答:1

我刚刚发表了一篇关于未显示图像的帖子,但是问题出了歧义,我在帖子中缺少信息,所以我想从一个更清晰的简洁问题开始。

我有一个允许用户使用UIImagePickerController选择图像的应用程序。在我的viewDidLoad中,我这样做

_pickercontroller = [[UIImagePickerController alloc] init];
_pickercontroller.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

然后我展示允许用户选择图像的控制器

[self presentViewController:_pickercontroller animated:YES completion:nil];

然后在我的didFinishPickingMediaWithInfo中保存图像名称,以便稍后在应用再次启动时显示它

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info{
    _selectedimage = info[UIImagePickerControllerOriginalImage];
    _selectedimageurl = info[UIImagePickerControllerImageURL];


    [picker dismissViewControllerAnimated:YES completion:nil];
    //[self.image setImage:target];

    //store this string later to be used
    NSString* path = [_selectedimageurl relativeString];
}

[从那里,我有一个UIImageView,它通过从该relativeString和类似的图像对象创建URL来显示用户选择的图像

NSURL* url = [[NSURL alloc] initWithString:path];
[image setImage:[[UIImage alloc]initWithData:[NSData dataWithContentsOfURL:url]]];

而且效果很好...但是!当我将NSString* path = [_selectedimageurl relativeString];保存到文件或数据库中,然后关闭并重新打开该应用程序时,我尝试再次显示该图像,并且不再显示该图像。它显示为空。我发现了为什么会这样,

它与imagepickercontroller有关,由于某些原因,调用[self presentViewController:_pickercontroller animated:YES completion:nil];允许在应用程序运行期间访问照片库,因此从保存的图像名称读取图像并显示该图像即可。但是,如果尚未调用[self presentViewController:_pickercontroller animated:YES completion:nil];,则尝试从图像名加载图像将不显示任何内容。

所以我只是想知道如何解决这个问题?因为如果图像已经保存,我不想启动imagepickercontroller。我只想显示保存的图像。但是除非调用[self presentViewController:_pickercontroller animated:YES completion:nil]; ...

,否则无法显示图像。

我不应该使用imagepickercontroller吗?我应该使用其他东西吗?我应该以其他方式保存图像名称吗?有人处理过吗?

谢谢

编辑:第一个解决方案允许使用Privacy - Photo Library Usage Description访问照片库。我已经做到了,在终止并重新打开应用程序后可以访问文件,但是随后又遇到了另一个问题。如果该应用已删除并重新下载,则该路径对图像不再有效

ios objective-c uiimagepickercontroller
1个回答
0
投票

由于它说是为了避免在评论中回答问题,因此我将其放在此处。因此,您实际上是在用户设备上获取图像的文件路径,并在以后尝试加载它。我认为这是不允许的。除非您征得许可,否则使用UIImagePickerController时会发生这种情况。您需要做的是使用FileManager API存储图像,以写入存储URL路径的目录,然后在需要时加载它们。

© www.soinside.com 2019 - 2024. All rights reserved.