我正在尝试将图像存储在核心数据
中。
我的 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/