NSKeyedArchiver の薄いラッパーライブラリ公開 LKArchiver

2014年1月23日木曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

ライブラリにするほどでも無いと思いつつ毎回キャッシュのディレクトリの取得はどうやったっけ、とかディレクトリやらファイル名の処理で毎回同じコードを書いている。Cocoapodsも使い始めたこともあり薄いラッパーを書いた。


使い方は簡単で保存先のディレクトリに応じて LKDocumentArchiver もしくは LKCachesArchiver を選んでクラスメソッドを呼び出すだけ。

アーカイブ
#import "LKDocumentArchier.h"

[LKDocumentDirectoryArchiver archiveRootObject:userList
                                        forKey:@"UserList"];
処理はいたって簡単で下記相当の処理が実行されるだけ。
// filename is equal to (Application Directory)/Documents/UserList.archive
[NSKeyedArchiver archiveRootObject:userList toFile:filename];
ファイル名は渡された key文字列に拡張子 ".archive" を付けたものになる(固定)。

アンアーカイブ
id userList = [LKDocumentDirectoryArchiver unarchiverObjectForKey:@"UserList"];

初回呼び出し時用に初期値も返せる。
id userList = [LKDocumentDirectoryArchiver unarchiveRootObject:userList
                                          forKey:@"UserList"
                                   defaultObject:^id{
                                       return @[].mutableCopy;
                                   }];
あるいは代わりに処理を走らせるなど。
id userList = [LKDocumentDirectoryArchiver unarchiveObject:userList
                                      forKey:@"UserList"
                                     failure:^{
                                        // do something
                                     }];



こちらも中身は NSKyedUnarchiverのメソッドを呼び出しているだけ。
id userList = [NSKeyedUnarchiver unarchiverObjectWithFile:filename];

なお共に @try/@catchで例外対応していて、例外発生時にはNSLogに書き出す。ただし処理は中断しない。

その他
アーカイブファイル削除
[LKDOcumentDirectoryArchiver removeArchiverForKey:@"UserList"];

アーカイブファイルの存在チェック
[LKDocumentDirectoryArchiver archiverExistsForKey:@"UserList"];

キャッシュディレクトリを使いたい場合は LKCachesDirectoryArchiverを使う。
[LKCachesDirecotryArchiver archiveRootObject:userList toFile:filename];



- - - -
コードが短すぎてわざわざライブラリにすべきか微妙ではあるが。。

Responses

Leave a Response

人気の投稿(過去 30日間)