【问题标题】:Save UIImage to Core Data将 UIImage 保存到核心数据
【发布时间】:2015-04-22 05:46:52
【问题描述】:

我正在尝试在 Core Data 上保存图像。属性类型是“可转换的”。当我使用以下句子时:

// 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

谢谢。

【问题讨论】:

    标签: core-data uiimage


    【解决方案1】:

    这是非常奇怪的行为。我认为没有什么可以完全解释这一点,但我会看看我能做些什么。

    imageNamed: 调用与其他创建图像的方法不同,因为它使用了自动图像缓存。当您使用imageNamed: 加载图像时,它会自动缓存,因此可以快速重复使用。预期用途是用于经常使用的图像,例如 UI 元素。它也适用于您只使用一次的图像,但在这种情况下并没有真正的优势。

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

    我认为这是一个错误,我建议将其报告给 Apple。与此同时,您有一个解决方法。作为安全检查,这样做可能是个好主意,以避免意外遇到问题:

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

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

    [如果 Apple 的任何人看到:报告为 rdar://20717042]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2012-05-05
      相关资源
      最近更新 更多