cocoaのモデルデータ関連技術のメモ¶
指先を怪我したのでバンドエイドを貼ったら、trackPadが反応してくれない。モチベーションが落ちる。
ローカルへの保存方法¶
cocoaアプリのファイルの保存形式では大別して以下の4つがある。
保存形式 |
大量データ |
複雑なデータ |
その他 |
|
---|---|---|---|---|
手書き |
気合い |
気合い |
気合い |
|
NSKeyedArchiver |
非公開 |
r/wに時間がかかる |
重複処理あり |
|
CoreData |
非公開 |
一部だけ読み出せる |
重複処理あり |
undo/redoサポート |
plist |
公開 |
r/wに時間がかかる |
重複処理なし |
この表だけを見ると、お手軽さや機能を考えればCoreData一択。
model-viewの同期方法¶
Cocoaアプリのモデルとviewの同期方法には主に以下の4つがある。
依存性 |
code or nib |
その他 |
|
---|---|---|---|
手書き |
コード |
||
cocoa binding |
iOSで使えない |
nib |
|
fetchResultController |
CoreData前提 |
コード |
coreDataがiCloudStorageと相性が悪い |
KVOとaction |
コード |
CoreDataを使う場合は、FetchResultControllerとKVOを使って書くのがよさげ。 CoreDataを使わない場合は、ButtonなどはKVOで書いて、TableViewはデリゲートを使った手書きになりそう。
データの保存と違って、手法の混在できるので、適材適所で行うのが良い。
デバイス間のドキュメントの同期方法¶
調べている途中で気がついたのですが、CoreData Storage 又はCoreData in iCloudと呼ばれる技術はDeprecatedになりました。 CoreDataを使って、iCloud経由でドキュメントを同期できる夢の技術だったのですが、致命的なバグでもあったのでしょう。
で、デバイス間のドキュメント同期技術は以下の2つです。
iCloud document storage
file単位に基づく同期。DropBoxのApple版といった所。PowerPointやWordのようなタイプの書類ベースのアプリとは相性が良いかもしれない。
変更部分だけのマージが出来ないので、巨大なバイナルファイルを丸ごと入れ替えになる。
CloudKit storage
クラウドにデータを置くことが主眼。グラウドにあるデータが主となる。JSからの呼び出しをサポートしているので、webアプリを作る場合は必須。
ネットに繋がっていないと使えない欠点がある。FileMakerやEverNoteのようなパーソナルデータベース型のアプリとは相性が良いかもしれない。
ローカルキャッシュをCoreDataに、ネットに繋がっている時にCloudKitで同期を行うと、上記の欠点を解消できる。
デバイス間の操作状態同期方法¶
同じユーザーアカウントの別デバイスに操作状態を引き継げる。
NSUserActivityを設定するらしい。使ったことないけど。
NSOrderedSetの感想¶
NSOrderedSetが使えそうで使えない。
CoreDataでは、NSOrderedSetをサポートしている。しかし、NSArrayControllerがOrdersSetに対応していない。
bindingでNSTablbeViewの中に順列を使うには、NSSet & NSSortOrderの組み合わせで表現する必要がある。
bindingでなくNSFetchResultControllerを使用しても良い。
CoreData中のNSOrderedSetはCoreDataの思想とあまり相性が良くないのかもしれない。
bindingでのサポートだけでなく、CoreDataInCloudでもサポートが無かった。
地雷を踏み抜かないように、SortOrderを使った昔ながらの手法を使用した方が良い。
Comments
comments powered by Disqus