Persist Set<UITouch> & UIEvent Objects in Swift (Using NSUserDefaults)

264 Views Asked by At

When I try to save an UIEvent-Object in NSUserDefaults, the app crashed with an error if i assign a UIEvent object.

Why? Is it possible to save an UIEvent with NSUserDefaults?

Here is my code:

extension UserDefaults {
    // UIEvent
    func event(forKey defaultName: String) -> UIEvent? {
        var event: UIEvent?
        if let eventData = data(forKey: defaultName) {
            event = NSKeyedUnarchiver.unarchiveObject(with: eventData) as? UIEvent
        }
        return event
    }

    func setEvent(_ value: UIEvent?, forKey defaultName: String) {
        var eventData: NSData?
        if let event = value {
            eventData = NSKeyedArchiver.archivedData(withRootObject: event) as NSData?
        }
        set(eventData, forKey: defaultName)
    }
}

and in the "Foil"-Class exists an UIEvent Property:

class Foil: NSObject, NSCoding {
    var event: UIEvent? {
        get {
            return UserDefaults.standard.event(forKey: "Event")
        }
        set {
            UserDefaults.standard.setEvent(newValue, forKey: "Event")
        }
    }
}
0

There are 0 best solutions below