Core data 将UIImage保存到核心数据
我正在尝试在核心数据上保存图像。属性类型是“可转换的”。当我使用以下句子时:Core data 将UIImage保存到核心数据,core-data,uiimage,Core Data,Uiimage,我正在尝试在核心数据上保存图像。属性类型是“可转换的”。当我使用以下句子时: // NOTHING SAVED entity.image = [UIImage imageNamed:@"a.jpg"]; [self saveContext]; 没有保存任何内容。但将上述句子替换为以下内容: entity.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"a" ofType:@"jp
// NOTHING SAVED
entity.image = [UIImage imageNamed:@"a.jpg"];
[self saveContext];
没有保存任何内容。但将上述句子替换为以下内容:
entity.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"a" ofType:@"jpg"]];
[self saveContext];
或
或
它可以工作太奇怪了。我非常确定[UIImage ImageName:@“a.jpg”]会正常返回。有人知道发生了什么吗?请
我的Xcode是6.3
谢谢。这是非常奇怪的行为。我不认为有什么可以完全解释这一点,但我会看看我能做些什么
imageNamed:
调用与其他创建图像的方法不同,它使用自动图像缓存。当您加载名为:的图像时,它会自动缓存,以便快速重复使用。预期用途是用于经常使用的图像,例如UI元素。它也适用于只使用一次的图像,但在这种情况下没有真正的优势
因此,imageNamed:
在内部执行的工作与其他图像创建方法不同。根据你的结果(顺便说一句,我也得到了同样的结果),这会产生一个效果不同的图像,至少在某些时候是这样的。但是,当您有一个UIImage
时,似乎没有任何方法可以询问它是如何创建的,或者它是否表示缓存的图像
<强>我认为这是一个错误< /强>,我建议把它报告给苹果。同时,你有一个变通办法。作为安全检查,最好执行以下操作,以避免意外遇到问题:
UIImage *image = // loaded in whatever way you want
entity.image = [UIImage imageWithCGImage:image.CGImage];
这一步骤应该是不必要的。但正如你所发现的,有时候正确的方法是行不通的
[如果苹果公司的任何人看到这一点:报告为rdar://20717042]
entity.image = UIImagePNGRepresentation([UIImage imageNamed:@"a.jpg"]);
[self saveContext];
UIImage *image = // loaded in whatever way you want
entity.image = [UIImage imageWithCGImage:image.CGImage];