imageWithContentsOfFile

imageWithContentsOfFile

我正在使用以下方式将图像写入模拟器缓存目录

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/

10-09 18:32