【问题标题】:UIImagePickerController and photo library accessUIImagePickerController 和照片库访问
【发布时间】:2020-09-07 02:56:57
【问题描述】:

我刚刚发布了关于未显示图片的帖子,但问题含糊不清,我缺乏关于帖子的信息,所以我想从一个更清晰简洁的问题重新开始。

我有一个应用程序,允许用户使用 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]; 没有被调用,那么尝试从 imagename 加载图像将不会显示任何内容。

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

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

谢谢

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

【问题讨论】:

标签: ios objective-c uiimagepickercontroller


【解决方案1】:

因为它说要避免在 cmets 中回答问题,所以我把它放在这里。因此,您实际上是在获取用户设备上图像的文件路径并尝试稍后加载它。我认为这是不允许的。除非您请求许可,否则当您使用 UIImagePickerController 时会发生这种情况。您需要做的是使用FileManager API 将图像存储到存储 URL 路径的目录中,然后在需要时加载它们。

【讨论】:

  • 我试图通过 info.plist 中的Privacy - Photo Library Usage Description 授予用户访问权限,并且该应用程序肯定被授予访问权限。但是还有另一个问题,当应用程序被删除并重新启动并再次授予访问权限时,该图像路径不再存在......查看我对帖子所做的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多