【发布时间】: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 访问照片库我已经这样做了,我可以在终止并重新打开应用程序后访问这些文件,但是我遇到了另一个问题。如果应用程序被删除并重新下载,则该路径对图像不再有效
【问题讨论】:
-
你是如何保存图片的?
-
我没有保存图像。我用
NSString* path = [_selectedimageurl relativeString];保存图像的名称,然后在我终止并重新打开应用程序或删除并重新下载应用程序后加载该字符串。然后图像不再出现。 -
不要保存 URL 以进行持久访问,保存信息字典 developer.apple.com/documentation/uikit/uiimagepickercontroller/… 中的 phAsset 数据
-
@WarrenBurton 如果我删除并重新下载应用程序,然后从文件/数据库加载该 phAsset 数据,该 phAsset 是否仍然有效?
-
不知道。它是 PHAsset 的 localIdentifier,您可以存储它以在以后恢复照片。请参阅 developer.apple.com/documentation/photokit/phobject/… 和 developer.apple.com/documentation/photokit/phasset/… 。本能地我会说不,但这是一个快速测试(对你来说)找出:-)
标签: ios objective-c uiimagepickercontroller