I have a CoreData Entity called Data that has an attribute called asset for image data:
extension Data {
static func createImage(label: Label, image: UIImage, context: NSManagedObjectContext) {
let newData = Data(context: context)
newData.id = UUID()
newData.type = "image"
newData.label = label
newData.setValue(image.pngData(), forKey:
"asset")
newData.date = Date()
context.saveContext()
}
I can't seem to figure out how to load the binary image data into an UIImage.
var fetchRequest: FetchRequest<Data>
var data: FetchedResults<Data> {
fetchRequest.wrappedValue
}
init(label: Label){
let sortDescriptor = NSSortDescriptor(keyPath: \Data.date, ascending: false)
let predicate = NSPredicate(format: "label == %@", label)
self.label = label
fetchRequest = FetchRequest<Data>(entity: Data.entity(), sortDescriptors: [sortDescriptor], predicate: predicate)
}
var body: some View {
LazyVGrid(columns: columns, alignment: .leading){
ForEach(data, id: \.self) { dataItem in
GeometryReader { gr in
Image(uiImage: UIImage(data: dataItem.asset ?? Data()) ?? UIImage())
}
}
And I get the error 'NSObject' is not convertible to 'Data'
I've also tried
let uiImage: UIImage = UIImage(data: dataItem.asset)!
Which gives the error
Cannot convert value of type 'Data?' to expected argument type 'Data'

if let imgData = dataItem.asset, let img = UIImage(data: imgData) { Image(uiImage: img) } else { Image(uiImage:UIImage()) }