imageWithcontentsOfFile无法从模拟器缓存目录

时间:2016-10-28 01:09:41

标签: ios uiimage

我正在使用

将图像写入模拟器缓存目录
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无效?

1 个答案:

答案 0 :(得分:1)

你的问题在于这一行:

NSString *avatarFile = avatarFileUrl.absoluteString;

查看avatarFile的值。它将类似于file:///....imageWithContentsOfFile:需要正确的文件路径,而不是文件URL。

您需要将文件URL正确转换为路径。这样做如下:

NSString *avatarFile = avatarFileUrl.path;