由于某些原因,我无法弄清楚如何将图像保存到核心数据并再次获取它们。我有一种感觉,这与我的类型有关,但请看一下:
完整的错误日志:
我从服务器发起API调用获取数据。它返回一个base64字符串。 以下是获取数据的代码:
updateAccessTokenOnly(newAccessToken: aToken!)
saveImageToDB(brandName: imageBrandName, image: data! )
这里我将它保存到我的数据库中:
func saveImageToDB(brandName: String, image: Data) {
dropImages(){tableDropped in
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)")
}
}
}
然后获取它:
func getImageFromDB(callback: @escaping (_ image: UIImage)-> ()) {
let fetchRequest: NSFetchRequest<NSManagedObject> = NSFetchRequest(entityName: "CoffeeShopImage")
do {
let searchResults = try getContext().fetch(fetchRequest)
for images in searchResults {
print("vi når her ned i get image")
if (images.value(forKey: "brandName")! as! String == "Baresso"){
print(images.value(forKey: "brandName")! as! String)
let image: Data = images.value(forKey: "image")! as! Data
let decodedimage = UIImage(data: image)
callback(decodedimage!)
}
}
} catch {
print("Error with request: \(error)")
}
}
完整的错误日志:
https://docs.google.com/document/d/1gSXE64Sxtzo81eBSjv4bnBjBnnmG4MX2tuvNtnuJDIM/edit?usp=sharing
希望有人能够帮忙。先行致谢!
更新
我卸载了该应用程序,然后上述代码就可以工作了。但是图片会变成蓝色?(是的,我已经检查过从数据库发送的图片是正确的)。
有什么解决方案吗?
DocumentDirectory
或Library
中,并将图像路径以字符串形式存储在CoreData中。在CoreData中以二进制数据或可转换形式存储图像会使编码/解码成为一项繁重的操作。 - viral