ukoasis blog

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に出来てしまえば、永続化は結構、手軽にできるなと思った。(セキュリティとかパフォーマンスとか考えなければ・・・)