将图像转换为NSData以保存在核心数据中

Swi*_*ter 1 core-data ios swift

我正在尝试存储图像core data.

我的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?
}
Run Code Online (Sandbox Code Playgroud)

但是当我试图保存到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)
    }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Cannot convert value of type 'Data?' to specified type 'NSData'
Run Code Online (Sandbox Code Playgroud)

我以为我做得对,但它不适合我.有人可以告诉我如何解决它吗?

提前致谢.

Mar*_*n R 5

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.
}
Run Code Online (Sandbox Code Playgroud)

您还应该参考"核心数据编程指南"中的"二进制大数据对象(BLOB)"部分,了解将二进制数据直接存储在数据库中的含义,以及可能的替代方案.