尝试将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的屏幕截图:
*** 我使用Swift(1.1)运行最新版本的Xcode(6.1)。
答案 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,它会生成错误。