NSUserDefaultsを使って自作クラスをシリアライズ/デシリアライズする
シリアライズとは、オブジェクトの内容をバイナリに変換すること。
バイナリからオブジェクトに復元することをデシリアライズという。
import Foundation class MyData :NSObject, NSCoding { var valueString :String? override init() { } func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(valueString, forKey: "valueString") } required init?(coder aDecoder: NSCoder) { valueString = aDecoder.decodeObjectForKey("valueString") as? String } }
上のようなクラスをNSUserDefaultsに保存して取り出す処理。
override func viewDidLoad() { super.viewDidLoad() print("process start") //NSUserDefaultsの生成 let userDefaults = NSUserDefaults.standardUserDefaults() //シリアライズ対象となるインスタンスを生成 let data = MyData() data.valueString = "test" //NSUserDefaultsにシリアライズしたデータを保存 let archiveData = NSKeyedArchiver.archivedDataWithRootObject(data) userDefaults.setObject(archiveData, forKey: "data") userDefaults.synchronize() //デシリアライズ処理 if let storedData = userDefaults.objectForKey("data") as? NSData { if let unarchivedData = NSKeyedUnarchiver.unarchiveObjectWithData(storedData) as? MyData { if let valueString = unarchivedData.valueString { print ("desirialize data:" + valueString) } } } }