【发布时间】:2014-12-28 04:34:48
【问题描述】:
我google了这个问题,大部分都用错了方法:[UIImage imageNamed:]。我不是。我确定该文件存在。以下代码在iOS8.1上运行。
self.cachePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
UIImage *avatorImage = [[UIImage alloc] initWithCGImage:headCGImage];
NSString *avatorName = [[[NSUUID alloc] init] UUIDString];
avatorName = [avatorName stringByAppendingPathExtension:@"png"];
avatorName = [self.cachePath stringByAppendingPathComponent:avatorName];
NSData *avatorImageData = UIImagePNGRepresentation(avatorImage);
BOOL writeSuccess = [avatorImageData writeToFile:avatorName atomically:YES];
if (!writeSuccess)
NSLog(@"Write to File Error");
//read file form other place, it's just nil.
UIImage *imageFromFile = [UIImage imageWithContentsOfFile:pathForImage];
然后我使用 [UIImage imageWithContentsOfFile:] 来获取 UIImage。有一件奇怪的事情。当我第一次运行应用程序时,一切正常。但是我停止了应用程序,然后再次运行它,[UIImage imageWithContentsOfFile:] 只返回一个零。我不知道为什么。
---------------我是可爱系-------------- ------------
Summery:从 iOS8 开始,每次运行应用时,来自 NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) 的目录不再相同。这就是为什么我的代码第一次运行就可以工作,之后就不行了。感谢 Midhun MP。
【问题讨论】:
-
你是如何找回图像的?
-
[UIImage imageWithContentsOfFile:]
-
我从你的问题中得到的。我问你是如何传递文件名的,你是如何创建的
-
Em,实际上,我使用 Core Data 来存储我的数据。实体的属性是 NSString,我将路径字符串分配给该属性,然后在某个地方获取该实体,使用 someEntity.pathForBackup 获取图像的路径,然后使用 [UIImage imageWithContentsOfFile:],路径如下:/var/mobile /Containers/Data/Application/5A70DE99-6F63-4592-898D-15289BADE9DE/Documents/CF7DFDB8-0A5D-4C13-9DFE-1C6C96B59DDA.png
-
您无法以这种方式获取图像。您不需要在核心数据中保留整个路径。而是保存文件名并在运行时计算路径。