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

标签 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?
}

然而,当我尝试使用以下方式保存到核心数据时:

    @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'

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

提前致谢。

最佳答案

UIImageJPEGRepresentation 返回一个 Data? 值。 这可以桥接到 NSData?as。然后使用可选绑定(bind) (if let) 安全地打开可选的:

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

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

关于ios - 将图像转换为 NSData 以保存在核心数据中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39572004/

相关文章:

iphone - 为核心数据中的对象赋值

ios - 如何在 GLSL ES 中编写 const 数组

ios - 如何在 Swift 2 中模糊场景

ios - 有没有办法让 NSFetchedResultsController 检测多个实体的变化?

ios - 为什么动画中的图像无法显示?

ios - Firebase Auth iOS 用户匿名创建但不在控制台中显示

ios - 核心数据 - 保存有关系但没有对象的实体

ios - 来自 sqlite 数据库的 NSMutableArray addObject 不起作用

ios - 检查 iOS 是否通过应用程序显示系统警报的可靠方法? (如定位服务等)

ios - 发送用户离线时创建的数据