我正在使用以下方式将图像写入模拟器缓存目录
NSURL *cacheDir = [[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory
inDomains:NSUserDomainMask].lastObject;
NSURL *avatarFileURL = [cacheDir URLByAppendingPathComponent:@"test.png" isDirectory:NO];
NSData *imageData = UIImagePNGRepresentation(avatarImage);
[imageData writeToURL:avatarFileURL atomically:YES];
这可以正常工作,我已经通过登录
avatarFile
网址并将其加载到浏览器中来显示该图片,从而验证了该图片。然后,我尝试读回测试图像,如果按以下方式使用
imageWithContentsOfFile:
和imageWithData:
,则会得到不同的结果:NSURL *cacheDir = [[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory
inDomains:NSUserDomainMask].lastObject;
NSURL *avatarFileURL = [cacheDir URLByAppendingPathComponent:@"test.png" isDirectory:NO];
// Returns a nil.
NSString *avatarFile = avatarFileUrl.absoluteString;
UIImage *image1 = [UIImage imageWithContentsOfFile:avatarFile];
// Returns the image.
NSData *imageData = [NSData dataWithContentsOfURL:avatarFileUrl];
UIImage *image2 = [UIImage imageWithData:imageData];
我不知为何要解释为什么
imageWithContentsOfFile
失败并且imageWithData
在它们都寻址相同的URL时起作用。我已经通过记录网址来验证了该网址,并且网址完全相同。有人知道为什么
imageWithContentsOfFile
不起作用吗? 最佳答案
您的问题是与此行:
NSString *avatarFile = avatarFileUrl.absoluteString;
查看
avatarFile
的值。就像file:///....
这样。 imageWithContentsOfFile:
需要正确的文件路径,而不是文件URL。您需要正确地将文件URL转换为路径。这样做如下:
NSString *avatarFile = avatarFileUrl.path;
关于ios - imageWithcontentsOfFile无法从模拟器缓存目录加载保存的图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40296461/