2015-12-19 51 views
9

我正在尝试对我的代码进行编程,以便在用户按下夜间按钮时,如果用户关闭应用程序,背景将变黑并保持黑色。 (同样适用于白天模式。)如何使用NSUserDefaults保存UIColor?

请注意:我已经编码了按钮,当他们按下按钮时,所有场景都会切换到该模式。

这里是我的代码,我要去哪里会需要的背景颜色要保存:(我需要在这两个if语句)

if GlobalData.dayBool == true && GlobalData.night == false { 
    backgroundColor = GlobalData.dayColor 
} 

if GlobalData.nightBool == true && GlobalData.dayBool == false { 
    backgroundColor = GlobalData.nightColor 
} 

我的日与夜颜色:

struct GlobalData { 
    static var score = 0 
    static var dayColor = UIColor(red:0.93, green:0.93, blue:0.93, alpha:1.0) 
    static var nightColor = UIColor(red:0.10, green:0.10, blue:0.10, alpha:1.0) 
    static var dayBool = true 
    static var nightBool = true 
} 

回答

12
extension NSUserDefaults { 
    func setColor(value: UIColor?, forKey: String) { 
     guard let value = value else { 
      setObject(nil, forKey: forKey) 
      return 
     } 
     setObject(NSKeyedArchiver.archivedDataWithRootObject(value), forKey: forKey) 
    } 
    func colorForKey(key:String) -> UIColor? { 
     guard let data = dataForKey(key), color = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? UIColor 
     else { return nil } 
     return color 
    } 
} 

您还可以创建的UIColor与getter setter方法自动保存为:

var nightColor: UIColor? { 
    get { 
     return NSUserDefaults.standardUserDefaults().colorForKey("nightColor") 
    } 
    set { 
     NSUserDefaults.standardUserDefaults().setColor(newValue, forKey: "nightColor") 
    } 
} 

编辑/更新:

的Xcode 8.1•斯威夫特3.0.1

extension UserDefaults { 
    func set(_ color: UIColor, forKey key: String) { 
     set(NSKeyedArchiver.archivedData(withRootObject: color), forKey: key) 
    } 
    func color(forKey key: String) -> UIColor? { 
     guard let data = data(forKey: key) else { return nil } 
     return NSKeyedUnarchiver.unarchiveObject(with: data) as? UIColor 
    } 
} 

var nightColor: UIColor? { 
    get { 
     return UserDefaults.standard.color(forKey: "nightColor") 
    } 
    set { 
     UserDefaults.standard.set(newValue, forKey: "nightColor") 
    } 
} 
0

最简单的方法是使用NSUserDefaults

简单的例子 -

let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject("Coding Explorer", forKey: "userNameKey") 

在这种情况下你存储的字符串"Coding Explorer",您可以通过按键"userNameKey"引用。我敢肯定,你可以看到你可以如何工作到解决方案此:P

的良好来源,以帮助您开始here

如果你想要的东西多一点健壮,看看CoreData中,然而,实现有点复杂。核心数据可能不是简单状态持久性所需要的,但可能值得研究。

链接here

编辑

Here is a great example to look at how you can save the actual color to NSUserData

+0

我已经看着那些网站。我试图保存背景颜色,我需要帮助。我寻求帮助,没有帮助。 –

+1

@JoshSchlabach你可以使用NSKeyedArchiver将你的UIColor对象保存到NSUserDefaults –