我正在尝试在核心数据上保存图像。属性类型为“可变形”。当我使用以下句子时:

// NOTHING SAVED
entity.image = [UIImage imageNamed:@"a.jpg"];
[self saveContext];

没有保存任何内容。 ,但将以上句子替换为以下内容:
entity.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"a" ofType:@"jpg"]];
[self saveContext];

要么
entity.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://some_url/a.jpg"]]];
[self saveContext];

要么
entity.image = UIImagePNGRepresentation([UIImage imageNamed:@"a.jpg"]);
[self saveContext];

有效!!! 太奇怪了。我非常确定[UIImage imageNamed:@“a.jpg”]会正常返回。有人知道发生了什么吗?请

我的Xcode是6.3

谢谢。

最佳答案

这是非常奇怪的行为。我认为没有什么可以完全解释这一点,但是我会看看我能做什么。
imageNamed:调用与其他创建图像的方式不同,因为它利用了自动图像缓存。使用imageNamed:加载图像时,该图像会自动缓存,因此可以快速重复使用。预期的用途是用于经常使用的图像,例如UI元素。它也适用于仅使用一次的图像,但是在那种情况下并没有真正的优势。

因此,imageNamed:在内部做的工作与其他图像创建方法不同。根据您的结果(顺便说一句,顺便说一句,顺便说一句),这会导致图像至少在某些情况下工作不同。但是,当您拥有UIImage时,似乎没有任何方法可以询问它的创建方式或它是否代表缓存的图像。

我认为这是一个错误,建议将其报告给Apple。同时,您有一种解决方法。为了安全起见,最好执行以下操作,以避免意外地遇到问题:

UIImage *image = // loaded in whatever way you want
entity.image = [UIImage imageWithCGImage:image.CGImage];

该步骤应该是不必要的。但是,正如您所发现的,有时正确的方法行不通。

[如果有Apple的人看到此情况,则报告为rdar:// 20717042]

关于core-data - 将UIImage保存到核心数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29788739/

10-10 03:26