Swift 核心数据 FetchRequest NSData 到 UIIMage

Posted

技术标签:

【中文标题】Swift 核心数据 FetchRequest NSData 到 UIIMage【英文标题】:Swift core data FetchRequest NSData to UIIMage 【发布时间】:2015-10-12 13:12:23 【问题描述】:

大家早上好,我正在使用 Swift “new for me”和核心数据,我正在尝试通过以下方式从核心数据中获取我存储的 UIIMage。仅供参考,它在核心中保存为二进制数据。如果我 NSLog 它,我可以看到数据。我的 Fetch Request 看起来像这样。我没有错误,但我的图像没有显示。

当我保存到 Core Data 时,NSLog 看起来像这样..

我有没有保存图片 2015-10-12 09:05:43.307 Car-Doc-Safe-Plus[13972:3524049] NewImage 里面有这个(实体:文档;ID:0x7fd4c0432060;数据: 自动俱乐部 = 无; driverLicense = ; 保险 ID = 无; noteText = 无; 盘子=无; 注册=无; )

但是当我获取它时它看起来像这样..

请求中有这个(实体:文档;谓词:((null));sortDescriptors:((null));类型:NSManagedObjectResultType;)

 **override func viewDidLoad() 
    super.viewDidLoad()

let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
let context:NSManagedObjectContext = appDel.managedObjectContext!

let request = NSFetchRequest(entityName: "Documents")
request.returnsObjectsAsFaults = false;
let results : NSArray
try! results = context.executeFetchRequest(request)
if results.count > 0 
    let res = results[0] as! NSManagedObject
    carImageView.image = res.valueForKey("driverLicense")as? UIImage

        
**

我知道我遗漏了一些东西,但我无法弄清楚。任何帮助是极大的赞赏。 JZ

【问题讨论】:

【参考方案1】:

Core Data 中的“二进制数据”类型用于读写NSData 对象。既然要读/写UIImage,就需要使用“可转换”类型。使用可转换,Core Data 将尝试使用NSCoding 对数据进行编码/解码,根据需要将其转换为NSData 或从NSData 转换(Swift as? 不会这样做)。由于UIImage 符合NSCoding,所以除了告诉Core Data 转换数据之外,您不需要做任何额外的工作。

【讨论】:

非常感谢,但是如何使用可转换的? 您在 Core Data 模型编辑器中将属性的数据类型设置为“可转换”。它与您之前将其设置为“二进制”的位置相同。有一个包含数字类型、字符串等的弹出列表,其中包括“可转换”。 太好了,我明白了!!非常感谢。没有多少人对此提供帮助,我想他们不知道。问候JZ

以上是关于Swift 核心数据 FetchRequest NSData 到 UIIMage的主要内容,如果未能解决你的问题,请参考以下文章

比较 Fetchrequest Xcode Swift OSX 核心数据的谓词中的 NSSet

核心数据的独特价值 swift

如何在 Swift 中使用这个 fetchRequest()?

从另一个视图控制器执行 FetchRequest

带有多个 sortDescriptor 和 Bool 过滤器的 Swift fetchRequest

Swift 3 核心数据获取问题