2016-09-19 125 views
1

我试图在core data中存储图像。将图像转换为NSData以保存核心数据

core data属性文件要求图像是在NSData

import Foundation 
import CoreData 

extension Item { 

    @nonobjc public class func fetchRequest() -> NSFetchRequest<TaskItem> { 
    return NSFetchRequest<TaskItem>(entityName: "Item"); 
    } 

    @NSManaged public var itemImage: NSData? 
} 

然而,当我试图使用保存到core data

@IBAction func saveBtnTapped(_ sender: AnyObject) { 


     let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

     let item = Item(context: context) 

     let imageData: NSData = UIImageJPEGRepresentation(taskImage.image!, 0.2) 

     item.itemImage = imageData 

     (UIApplication.shared.delegate as! AppDelegate).saveContext() 

     } 
     navigationController?.popViewController(animated: true) 
    } 

我得到以下错误:

Cannot convert value of type 'Data?' to specified type 'NSData' 

我以为我在做它是正确的,但它不适合我。有人能给我一个如何解决它的想法吗?

在此先感谢。

+3

不要将图像保存到核心数据中,只是将图像保存到磁盘并将图像名称/路径保存到coredata – Tj3n

+1

您可以将图像保存到本地目录,然后将路径/ URL保存到coredata。 –

+0

如果一切都失败了,我会走这条路 – SwiftStarter

回答

4

UIImageJPEGRepresentation返回一个Data?值。 这可以桥接到NSData?as。然后,使用可选的结合 (if let)安全地拆开包装可选:

if let imageData = UIImageJPEGRepresentation(...) as NSData? { 
    // Now `imageData` is a `NSData` object. 
    item.itemImage = imageData 
} else { 
    // Conversion to JPEG data failed. 
} 

你也应该咨询“二进制大数据对象(BLOB)” 一节中的“核心数据编程指南”有关的 的影响将二进制数据直接存储在数据库中以及可能的备选方案

+0

是的,这确实把它转换为NSData谢谢。 – SwiftStarter