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

时间:2016-09-19 11:23:15

标签: ios swift core-data

我试图将图像存储在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?
}

但是,当我尝试使用以下内容保存到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'

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

提前致谢。

1 个答案:

答案 0 :(得分: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.
}

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