2016-01-06 56 views
0

我想用核心数据在swift中制作Transformable图像。 我创建了可变形的imageA。 当我试图看到数据库中是否有图像时,它告诉我们这里没有任何东西。 如何将图像添加到数据库?我的代码有什么问题? 这里是我的代码如何在swift中制作Transformable图像?

我使用方法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)") 
    } 
} 

类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

存储图像数据库中重操作,这将需要更多的时间来编码和解码或转化。

而不是转换,尝试将图像保存在文档目录中,并将其URL存储在数据库中。

+0

谢谢你的回答。但在小图像的情况下,只有一个图像来存储它,我认为如果我将使用转换,则代码会更少,所以我仍然需要这种方式。 – user

1

您使用的是UIImage,它符合NSCoding。因此,你不需要自定义值变换器,因为UIImage已经涵盖了。所有你需要做的是:

  1. 声明属性有型Transformable在核心数据模型编辑器
  2. 读写UIImage该属性。转换为/从二进制形式将由UIImage处理。
+0

我不需要所有与NSValueTransformer的子类相关的代码,并且我不需要更改@NSManaged var imageA:NSObject? – user

+0

到@NSManaged var imageA:UIImage? 是这样吗? 在这种情况下,图像不保存到核心数据。 – user

+0

是的,它是如此。对于采用NSCoding的类,您不需要自定义转换器。如果它不起作用,请确保将属性类型更改为“可变形”。 –