Posts

Post marked as solved
1 Replies
359 Views
I generated model classes using XCode's auto-generate functionality while trying to migrate from CoreData to SwiftData. I get a fatal error on launch - Thread 1: Fatal error: Unable to initialize ValueTransformer for UIImageTransformer Any suggestions are welcome! Please find the code below: import SwiftData import UIKit @Model public class ******** { public var id: UUID = UUID() var idDrink: String = "" @Attribute(.transformable(by: UIImageTransformer.self)) var image: UIImage? var isFavourite: Bool = false var order: Int16 = 0 var strAlcoholic: String = "" var strCategory: String = "" @Attribute(.unique) var strDrink: String = "" var strDrinkThumb: String = "" var strGlass: String = "" var strImageSource: String = "" var strInstructions: String = "" @Relationship(inverse: \Component.********) var ingredient: [Component] = [] public init() { } } import Foundation import SwiftData @Model public class Component { var measure: String? var name: String? var ********: ********? public init() { } } Value transformer: import UIKit class UIImageTransformer: ValueTransformer { static let name = NSValueTransformerName(rawValue: "UIImageTransformer") override func transformedValue(_ value: Any?) -> Any? { guard let image = value as? UIImage else { return nil } do { let data = try NSKeyedArchiver.archivedData(withRootObject: image, requiringSecureCoding: true) return data } catch { return nil } } override func reverseTransformedValue(_ value: Any?) -> Any? { guard let data = value as? Data else { return nil } do { let image = try NSKeyedUnarchiver.unarchivedObject(ofClass: UIImage.self, from: data) return image } catch { return nil } } override public class func transformedValueClass() -> AnyClass { return UIImage.self } override public class func allowsReverseTransformation() -> Bool { return true } static func register() { ValueTransformer.setValueTransformer(UIImageTransformer(), forName: name) } } App: import SwiftUI @main struct CocktailsSwiftUIApp: App { // MARK: Body var body: some Scene { WindowGroup { ContentView() } .modelContainer(for: [********.self, Component.self]) } }
Posted
by vriu.
Last updated
.