无法 load/retrieve 来自 Core Data 的图像
Unable to load/retrieve image from Core Data
我整天都在互联网上搜索解决方案,但一无所获..
我正在将图像保存到核心数据中,当使用带有 NSFetchRequest 的打印(结果)进行测试时,建议通过在 'debug area'...
中显示以下内容将其存储在核心数据中
[<toootesting.Entity: 0x7fb0816a69f0> (entity: Entity; id: 0xd000000000040000 <x-coredata://2D52E511-B03F-4629-ADF1-DEBD80A63EC0/Entity/p1> ; data: {
photo = <89504e47 0d0a1a0a 0000000d 49484452 0000021c 000001e4 08020000 00fab561 c2000000 01735247 4200aece 1ce90000 0009>;
图像使用以下代码保存...
@IBAction func buttonOne(sender: AnyObject) {
let img = UIImage(named: "Fencing")
self.imageViewOne.image = img
let imgData = UIImagePNGRepresentation(img!)
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
var newPhotos = NSEntityDescription.insertNewObjectForEntityForName("Entity", inManagedObjectContext: context)
newPhotos.setValue(imgData, forKey: "photo")
do {
try context.save()
print("image saved")
} catch {
print("error - saving NSData Image")
}
}
但是,当我尝试将保存的 CoreData 图像加载到第二个 imageView 时,获取请求出现错误...."Cannot convert value of type[AnyObject] to expected argument type NSData"
代码是...
@IBAction func loadButton(sender: AnyObject) {
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
let request = NSFetchRequest(entityName: "Entity")
request.returnsObjectsAsFaults = false
do {
let results = try context.executeFetchRequest(request)
print(results)
self.imageViewTwo?.image = UIImage(data: results)
} catch {
print("error - Loading!!!")
}
}
我似乎可以在第一个操作中将 UIImage 转换为 NSData,但在 Fetch 上,无法将 NSData 转换回 UIImage 以便在 viewController 上显示它。
我的问题是,如果我可以轻松地从 UIImage 转换为 NSData,我是否能够以相同的方式反之亦然?是什么阻止代码显示图像?编码解决方案将不胜感激。
非常感谢您的提前帮助,因为我是这里的新手。
提取请求returns一个数组。你必须
- 提取第一个对象
- 转换为
NSData
因此:
let results = try context.executeFetchRequest(request) as! [Entity]
let imageData = results.first!.photo
请注意,在运输代码中,您应该避免强制解包选项。
以上适用于您已将 NSManagedObject 子类化以描述 Entity
实体。
我整天都在互联网上搜索解决方案,但一无所获.. 我正在将图像保存到核心数据中,当使用带有 NSFetchRequest 的打印(结果)进行测试时,建议通过在 'debug area'...
中显示以下内容将其存储在核心数据中
[<toootesting.Entity: 0x7fb0816a69f0> (entity: Entity; id: 0xd000000000040000 <x-coredata://2D52E511-B03F-4629-ADF1-DEBD80A63EC0/Entity/p1> ; data: { photo = <89504e47 0d0a1a0a 0000000d 49484452 0000021c 000001e4 08020000 00fab561 c2000000 01735247 4200aece 1ce90000 0009>;
图像使用以下代码保存...
@IBAction func buttonOne(sender: AnyObject) {
let img = UIImage(named: "Fencing")
self.imageViewOne.image = img
let imgData = UIImagePNGRepresentation(img!)
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
var newPhotos = NSEntityDescription.insertNewObjectForEntityForName("Entity", inManagedObjectContext: context)
newPhotos.setValue(imgData, forKey: "photo")
do {
try context.save()
print("image saved")
} catch {
print("error - saving NSData Image")
}
}
但是,当我尝试将保存的 CoreData 图像加载到第二个 imageView 时,获取请求出现错误...."Cannot convert value of type[AnyObject] to expected argument type NSData"
代码是...
@IBAction func loadButton(sender: AnyObject) {
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext
let request = NSFetchRequest(entityName: "Entity")
request.returnsObjectsAsFaults = false
do {
let results = try context.executeFetchRequest(request)
print(results)
self.imageViewTwo?.image = UIImage(data: results)
} catch {
print("error - Loading!!!")
}
}
我似乎可以在第一个操作中将 UIImage 转换为 NSData,但在 Fetch 上,无法将 NSData 转换回 UIImage 以便在 viewController 上显示它。
我的问题是,如果我可以轻松地从 UIImage 转换为 NSData,我是否能够以相同的方式反之亦然?是什么阻止代码显示图像?编码解决方案将不胜感激。
非常感谢您的提前帮助,因为我是这里的新手。
提取请求returns一个数组。你必须
- 提取第一个对象
- 转换为
NSData
因此:
let results = try context.executeFetchRequest(request) as! [Entity]
let imageData = results.first!.photo
请注意,在运输代码中,您应该避免强制解包选项。
以上适用于您已将 NSManagedObject 子类化以描述 Entity
实体。