【发布时间】:2017-02-23 12:53:43
【问题描述】:
是的,我知道还有其他类似的问题,但似乎还没有适合我的答案...
我有一个返回 base64 字符串的 api 调用。我尝试将其保存到核心数据,然后作为图片返回。我不知道我哪里出错了,也许你们中的一些聪明人可以帮助我。
这是我从我的 api 调用中接收数据的地方:
let image = data?.base64EncodedString()
saveImageToDB(brandName: imageBrandName, image: image!)
brandName 只是一个字符串,例如:“Baresso”。
我的 saveImageToDB:
func saveImageToDB(brandName: String, image: String) {
let managedContext = getContext()
let entity = NSEntityDescription.entity(forEntityName: "CoffeeShopImage", in: managedContext)!
let CSI = NSManagedObject(entity: entity, insertInto: managedContext)
let image = UIImage(named: image)
//this is the line that appears to be wrong
let imageData = NSData(data: (UIImagePNGRepresentation(image!)?.base64EncodedData())!)
CSI.setValue(imageData, forKey: brandName)
do {
try managedContext.save()
print("saved!")
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
我的获取函数:
func getImageFromDB(callback: @escaping (_ image: UIImage)-> ()) {
var imageFromDB: UIImage?
let fetchRequest: NSFetchRequest<NSManagedObject> = NSFetchRequest(entityName: "CoffeeShopImage")
do {
let searchResults = try getContext().fetch(fetchRequest)
for images in searchResults {
let image = images.value(forKey: "Baresso") as! NSData
imageFromDB = UIImage(data: image as Data)!
callback(imageFromDB!)
}
} catch {
print("Error with request: \(error)")
}
}
我的错误日志:
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
看来我没有保存我的图像,这有点道理,但是我不知道我做错了什么?
编辑:
我弄乱了我的类型。更正后的代码如下:
func saveImageToDB(brandName: String, image: NSData) {
let managedContext = getContext()
let entity = NSEntityDescription.entity(forEntityName: "CoffeeShopImage", in: managedContext)!
let CSI = NSManagedObject(entity: entity, insertInto: managedContext)
CSI.setValue(image, forKey: "image")
CSI.setValue(brandName, forKey: "brandName")
do {
try managedContext.save()
print("saved!")
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
【问题讨论】:
标签: core-data swift3 uiimage base64