如何在swift中制作可转换的图像?

时间:2016-01-06 12:41:10

标签: ios swift core-data

我正在尝试使用核心数据快速制作可转换的图像。 我创建了可转换的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)")
        }
    }

    }
}

2 个答案:

答案 0 :(得分:1)

您正在使用符合UIImage的{​​{1}}。因此,您不需要自定义值转换器,因为NSCoding已经涵盖了这一点。您所需要做的就是:

  1. 声明属性在Core Data模型编辑器中具有类型UIImage
  2. 读取Transformable到该属性。转换为二进制表单的转换将由UIImage处理。

答案 1 :(得分:0)

要在数据库中存储图像是一项繁重的操作,编码和解码或转换需要更多时间。

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