CoreData Transformable compile warning: no NSValueTransformer was found

52 Views Asked by At

Following this Medium article I created the following class:

import CoreMotion

public class Attitude : NSObject, NSSecureCoding
{
    public static var supportsSecureCoding = true

    var quaternion: CMQuaternion

    enum Key : String
    {
        case quaternionX
        case quaternionY
        case quaternionZ
        case quaternionW
    }

    public init(quaternion: CMQuaternion)
    {
        self.quaternion = quaternion
    }

    public required init?(coder: NSCoder)
    {
        let x = coder.decodeDouble(forKey: Key.quaternionX.rawValue)
        let y = coder.decodeDouble(forKey: Key.quaternionY.rawValue)
        let z = coder.decodeDouble(forKey: Key.quaternionZ.rawValue)
        let w = coder.decodeDouble(forKey: Key.quaternionW.rawValue)

        quaternion = CMQuaternion(x: x, y: y, z: z, w: w)
    }

    public func encode(with coder: NSCoder)
    {
        coder.encode(quaternion.x, forKey: Key.quaternionX.rawValue)
        coder.encode(quaternion.y, forKey: Key.quaternionY.rawValue)
        coder.encode(quaternion.z, forKey: Key.quaternionZ.rawValue)
        coder.encode(quaternion.w, forKey: Key.quaternionW.rawValue)
    }
}

public class AttitudeTransformer : NSSecureUnarchiveFromDataTransformer
{
    public override static var allowedTopLevelClasses: [AnyClass]
    {
        [Attitude.self]
    }

    static func register()
    {
        let className = String(describing: AttitudeTransformer.self)
        let name = NSValueTransformerName(className)
        let transformer = AttitudeTransformer()

        ValueTransformer.setValueTransformer(transformer, forName: name)
    }
}

I've double checked and set things up correctly on CoreData side it seems:

Xcode screenshot

Found this old post, but NSSecureUnarchiveFromDataTransformer extends the new ValueTransformer, so I don't see what I'm missing. Also tried adding @objc(AttitudeTransformer).

Any ideas?

0

There are 0 best solutions below