我刚刚发表了一篇关于未显示图像的帖子,但是问题出了歧义,我在帖子中缺少信息,所以我想从一个更清晰的简洁问题开始。
我有一个允许用户使用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
访问照片库。我已经做到了,在终止并重新打开应用程序后可以访问文件,但是随后又遇到了另一个问题。如果该应用已删除并重新下载,则该路径对图像不再有效
由于它说是为了避免在评论中回答问题,因此我将其放在此处。因此,您实际上是在用户设备上获取图像的文件路径,并在以后尝试加载它。我认为这是不允许的。除非您征得许可,否则使用UIImagePickerController
时会发生这种情况。您需要做的是使用FileManager
API存储图像,以写入存储URL路径的目录,然后在需要时加载它们。