我试图将图像存储在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'
我以为我做得对,但它不适合我。有人可以告诉我如何解决它吗?
提前致谢。
答案 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)”部分 在“核心数据编程指南”中关于的含义 将二进制数据直接存储在数据库中,以及可能的替代方案。