[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から変換 }