NSUserDefaults中的UIColor Swift / iOS 8。

4

我正在为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")
}

但是我似乎无法将其取回,因为在Swift中,NSKeyedArchiver上的unarchive方法似乎缺失了。

var userSelectedColorData: NSData? = (NSUserDefaults.standardUserDefaults().objectForKey("UserSelectedColor") as NSData)
var userSelectedColor : UIColor? = NSKeyedArchiver.unarchiveObjectWithData(userSelectedColorData)

什么是在Swift / iOS 8中正确的做法?
1个回答

6

使用NSKeyedUnarchiver进行解档,而不是使用NSKeyedArchiver。还应该使用条件转换(as?)来确保如果保存的用户默认值不是预期类型时应用程序不会崩溃:

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

使用扩展程序可以参考这个答案 - Suragch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接