我正在尝试使用核心数据快速制作可转换的图像。 我创建了可转换的imageA。 当我试图看到数据库中有图像时,它告诉那里什么都没有。 如何将图像添加到数据库?我的代码出了什么问题? 这是我的代码
我使用方法setImage 和getImage在哪里保存和获取@NSManaged var isSet:NSNumber?
extension AppSettings {
@NSManaged var isSet: NSNumber?
@NSManaged var imageA: UIImage?
}
func setImage(inputAppSettings : AppSettings)
{
let theImage = UIImage(named: "image.png")
inputAppSettings.imageA = theImage
}
func getImage(inputAppSettings : AppSettings)
{
if let theImage = inputAppSettings.imageA
{
print("theImage: \(theImage)")
}
}
class MyTransformer:NSValueTransformer {
override class func allowsReverseTransformation() -> Bool
{
return true
}
class func transformedValue(value:AnyObject) -> AnyObject
{
var returnData:AnyObject = NSData()
let theImage = value as! UIImage
if let theData = UIImagePNGRepresentation(theImage)
{returnData = theData}
return returnData
}
class func reverseTransformedValue(value:AnyObject) -> AnyObject
{
var returnImage:AnyObject = UIImage()
let theData = value as! NSData
if let theImage = UIImage(data: theData)
{returnImage = theImage}
return returnImage
}
override class func transformedValueClass() -> AnyClass
{
return UIImage.self
}
}
func set()
{
if let moc = self.managedObjectContext {
let theAppSettingsAnyObject = NSEntityDescription.insertNewObjectForEntityForName("AppSettings", inManagedObjectContext: moc)
if let theAppSettings = theAppSettingsAnyObject as? AppSettings
{
theAppSettings.isSet = true
self.setImage(theAppSettings)
}
var savingError: NSError?
do {
try moc.save()
} catch let error1 as NSError {
savingError = error1
if let error = savingError{
print("Failed to save . Error = \(error)")
}
}
}
}
答案 0 :(得分:1)
您正在使用符合UIImage
的{{1}}。因此,您不需要自定义值转换器,因为NSCoding
已经涵盖了这一点。您所需要做的就是:
UIImage
Transformable
到该属性。转换为二进制表单的转换将由UIImage
处理。答案 1 :(得分:0)
要在数据库中存储图像是一项繁重的操作,编码和解码或转换需要更多时间。
而不是转换,尝试在Document目录中保存图像,并将其url存储在数据库中。