Search code examples
macosswiftnsuserdefaultsnsdatanscolor

Unarchive NSData back to NSColor in swift


I have archived an NSColor to store it in NSUserDefaults:

var data = NSArchiver.archivedDataWithRootObject(NSColor.redColor())
storage.setObject(data, forKey: "color")
storage.synchronize()

But now I need to get the color back from NSData, I have no idea how to do that


Solution

  • You just need to use if let to unwrap your NSData and also you will need a conditional cast as follow:

    edit/update:

    Swift 3 or later

    // archiving
    let color: NSColor = .red
    let data = NSKeyedArchiver.archivedData(withRootObject: color)
    UserDefaults.standard.set(data, forKey: "color")
    

    // unarchiving 
    if let loadedData = UserDefaults.standard.data(forKey: "color"), 
        let loadedColor =  NSKeyedUnarchiver.unarchiveObject(with: loadedData) as? NSColor {
        // you can access loadedColor here
        print(loadedColor)  // "sRGB IEC61966-2.1 colorspace 1 0 0 1\n"
    }