2015-12-19 21 views
9

私は自分のコードをプログラムしようとしているので、ユーザーが夜間ボタンを押した場合、ユーザーがアプリを閉じると背景が黒くなり黒くなります。 (デイモードでも同じです)NSUserDefaultsでUIColorを保存するにはどうすればよいですか?

注意:すでにボタンをコーディングしていて、それを押すと、すべてのシーンがそのモードに変わります。 (私は文の両方であれば、それを必要とする)

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を作成することができます。

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です。

簡単な例 - あなたは文字列"Coding Explorer"を格納していて、キー"userNameKey"で参照することができます。この場合

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

。 、P

良い情報源は、あなたがhere

を始めるのに役立つあなたが少しより堅牢な何かをしたい場合は、CoreDataを見てみましょう:私はあなたがあなたのソリューションにこれを働くことができる方法を見ることができると確信してい実装はもう少し複雑です。 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に保存できます –

関連する問題