将UIImage作为二进制数据保存到Core Data实体时出错

时间:2014-12-29 01:50:06

标签: ios iphone core-data swift uiimage

尝试将UIImage保存到CoreData持久性存储时,我收到以下错误:

NSConcreteMutableData CGImage]:无法识别的选择器发送到实例0x7fe85a4b5cd0 2014-12-28 20:27:16.307 MyAppName [1578:245578]由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [NSConcreteMutableData CGImage]:无法识别的选择器发送到实例0x7fe85a4b5cd0&# 39;

self.image = data函数的setImage(image: UIImage)行会抛出异常。

这是我创建UIImage实例的地方:

let ipaIcon = CoreData.newIconWithImageAndName(UIImage(named: "IPA-Day.png")!, name: "IPA-Day")

此功能位于我的数据访问层中:

class func newIconWithImageAndName(image:UIImage, name:String) -> Icon?
{
    if(Icon.ExistsInStorage(name))
    {
        return nil
    }
    var description = NSEntityDescription.entityForName(Lookup.EntityName.Icon.rawValue, inManagedObjectContext: context)

    var newIcon = Icon(entity: description!, insertIntoManagedObjectContext: context)

    newIcon.setImage(image)
    newIcon.name = name

    var saveError: NSError?

    context.save(&saveError)

    if let error = saveError
    {
        println("Error creating new icon with image and name: \(name)")
                return nil;
    }

    return newIcon

}

这是我保存将图像转换为NSData并尝试将其设置为托管对象的NSData属性的代码:

func setImage(image: UIImage)
{
    let data: NSData = UIImagePNGRepresentation(image)

    self.image = data
}

这是我的xcdatamodel的屏幕截图: enter image description here

*** 我使用Swift(1.1)运行最新版本的Xcode(6.1)。

2 个答案:

答案 0 :(得分:3)

尝试这样做:

newIcon.image = UIImagePNGRepresentation(image)

而不是:

newIcon.setImage(image)

您可以显式为属性 image 定义一个setter,但参数类型错误。你必须这样做:

func setImage(data: NSData)
{
    image = data
}

并将其称为:

newIcon.setImage(UIImagePNGRepresentation(image))

答案 1 :(得分:0)

您正面临这个问题,因为您正在尝试将消息CGImage发送到NSData实例,该实例当然没有CGImage方法。

当您认为尝试转换NSData实例时,它认为它是UIImage,它会生成错误。