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