iOSでEvernoteのNotebook情報をNSUserDefaultsに保存する
January 17, 2015
EvernoteのSDKを利用したiOSアプリを作成中で、Notebookの情報を他のページでも呼び出したいので、NSUserDefaultsで永続しよう。としたが、-(void)setObject:(id)value forKey:(NSString *)defaultName
でも、利用できる型が決まっていて、NSData,NSString,NSNumber,NSDate,NSArray,NSDictionaryのみなんだな・・・それ以外のobjectを保存したい場合は、どうするか。というところで調べたのでメモした。
参考
http://iphone-dev.g.hatena.ne.jp/yossy44/20081105/1225903311 https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html
概要
- NSCoding protocolを実装する
今回対象のEvernoteSDKのNotebook情報(ENNotebook)は、NSCoding protocolを実装済みなので、このステップはパス
- NSDataにシリアライズして、NSUserDefaultsに保存
自分の場合は、UITableViewで選択したノートブックを保存。という流れだったので、NSArrayに入っているENNotebookを保存する、というコードで以下の様な感じになった。
NSKeyedArchiver.archivedDataWithRootObject
で、NSDataにシリアライズしている。
var userDefaults = NSUserDefaults.standardUserDefaults();
userDefaults.setObject(NSKeyedArchiver.archivedDataWithRootObject(notebooks[indexPath.row]),
forKey: "<<KEY>>")
最後に
setObjectという名前を素直に受け取ると、あれ?っとなるので忘れないようにメモした。とりあえず、NSDataに出来てしまえば、永続化は結構、手軽にできるなと思った。(セキュリティとかパフォーマンスとか考えなければ・・・)