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)
                }
            }
        }
    }