我正在为iOS编写一个Swift应用程序。我需要将uicolor对象设置为nsuserdefaults,然后再检索它。
我是这样设置的:

var userSelectedColor : NSData? = (NSUserDefaults.standardUserDefaults().objectForKey("UserSelectedColor") as? NSData)

if (userSelectedColor == nil) {
    var colorToSetAsDefault : UIColor = UIColor.redColor()
    var data : NSData = NSKeyedArchiver.archivedDataWithRootObject(colorToSetAsDefault)
    NSUserDefaults.standardUserDefaults().setObject(data, forKey: "UserSelectedColor")
    NSUserDefaults.standardUserDefaults().synchronize()
    println("SET DEFAULT USER COLOR TO RED")
}

但我似乎无法收回它,因为nskeyedarchiver上的无政府方法似乎在swift中丢失了。
var userSelectedColorData: NSData? = (NSUserDefaults.standardUserDefaults().objectForKey("UserSelectedColor") as NSData)
var userSelectedColor : UIColor? = NSKeyedArchiver.unarchiveObjectWithData(userSelectedColorData)

在Swift/iOS 8中,正确的方法是什么?

最佳答案

无存档是用NSKeyedUnarchiver完成的,而不是用NSKeyedArchiver完成的。你也应该
使用条件强制转换(as?)确保应用程序在
保存的用户默认值不是预期的类型:

if let userSelectedColorData  = NSUserDefaults.standardUserDefaults().objectForKey("UserSelectedColor") as? NSData {
    if let userSelectedColor = NSKeyedUnarchiver.unarchiveObjectWithData(userSelectedColorData) as? UIColor {
        println(userSelectedColor)
    }
}

10-04 14:51