[swift] NSDataにオブジェクトを変換してNSUserDefaultsに何でも保存

目次

NSDataにオブジェクトを変換してUserDefaultに何でも保存

ローカルにデータ保存できるUserDefaulthは便利だが、保存できる型が決まっていたりして
保存したいオブジェクトが保存できない場合がある

その場合、オブジェクトを一度NSDataに変換すると何でも保存可能
もちろん読み出した場合はNSData形式で返ってくるので、元の型に変換する必要がある

NSDataに変換し保存

*CLLocationの配列でも保存できる

func saveUserDefaultData(keyStr:String,valueStr:AnyObject){
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(valueStr, forKey: keyStr)
    let success = defaults.synchronize()
    
    if success {
        //print(defaults.objectForKey(keyStr))
    }
}
var locationList = [CLLocation]()
let locationListArchive = NSKeyedArchiver.archivedDataWithRootObject(locationList)
saveUserDefaultData("locationList", valueStr: locationListArchive)

読み込んでNSDataから変換

func readUserDefaultData(keyStr:String)->NSData?{
    let defaults = NSUserDefaults.standardUserDefaults()
    let result: NSData! = defaults.dataForKey(keyStr);
    return(result);
}

let temp:NSData = readUserDefaultData("locationList"){
            locationList = (NSKeyedUnarchiver.unarchiveObjectWithData(temp) as? [CLLocation])! //NSDataから変換
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です