我正在使用
将图像写入模拟器缓存目录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
无效?
答案 0 :(得分:1)
你的问题在于这一行:
NSString *avatarFile = avatarFileUrl.absoluteString;
查看avatarFile
的值。它将类似于file:///....
。 imageWithContentsOfFile:
需要正确的文件路径,而不是文件URL。
您需要将文件URL正确转换为路径。这样做如下:
NSString *avatarFile = avatarFileUrl.path;