« iphone 開発 サンプル「CoreDataBooks」を読む。2 | トップページ | retain autorelease ドット演算子 »

2010年6月24日 (木)

iphone 開発 サンプル「CoreDataBooks」を読む。3

iphone 開発 サンプル「CoreDataBooks」を読む。3

「概要」
サンプル「CoreDataBooks」を読む。2のつづき。

iphoneアプリの開発者向けサイトのサンプル「CoreDataBooks」を参照する。
ソースを読んだ時系列にメモしていくので、疑問点(?)などもそのままかいている。
以下の文は、CoreDataBooksを読もうとしている人以外には、情報がないと思う。
また、間違いもたくさんあると思う。鵜呑みにしないようにご注意を。

「今回の目的」
UndoManagerを理解する。

DetailViewControllerに出てくるundo系の操作は何をしているか。
たぶんキャンセル時など、ユーザの入力をなかったことにしているのでは。
仕組みがよくわからない。

リファレンス「Introduction to Undo Architecture」を読む。

操作を取り消しできる。
取り消しができるということは、やり直し(取り消しの取り消し)もできるということ。

操作はundo groupsに集められる。取り消しはグループ単位で行われる。
取り消したい単位でグループを作成すること。

undoとredoはそれぞれにstackをもつ。
最初は両方からっぽ。
そのあとはいろいろと増えたり減ったり。

undo stackにpushする方法は2つある。
"Simple undo"
 変更があったとき、そのオブジェクトが変更をマネージャに登録する。
 一つの引数しか持てない。

"Invocation-based undo"
 NSInvocationを使う。
 引数をいくつでも持てる。

うーん、難しい。

ネットで調べてみる。非常にわかりやすい解説がある。
http://journal.mycom.co.jp/column/objc/095/index.html
http://xcatsan.blogspot.com/2008/05/rubberband19undo-nsundomanager.html

要点は、
・何か操作を行うとき、それを元に戻す操作を登録する。(undo stackへのpush)
・取り消しが行われたとき、
 1.undo stackの操作がpopされ実行される。
 2.「1.」への取り消しがredo stackにpushされる。
で、redoが行われたときは、redoからpop実施され、その取り消しがundoにpushされるはず。

ちょこっと知識が増えたので、もう一度ソースを見る。

DetailViewControllerのメソッドsetUpUndoManagerでNSUndoManagerが生成されている。
そこでNSNotificationCenterに、undo/redo実施時に呼び出すメソッドをひもづけている?

また知らないクラスが出てきた。NSNotificationCenter。保留。

undo/redo実施の通知を受けたら、テーブルビューをリロードして、右のボタンを制御仕手いる模様。

undo/redoはどこで実施されるのか?

EditingViewControllerのメソッドsaveで、setActionNameで、アクション名を登録している。
が、これが使われる場所がわからない。

DetailViewControllerのundoManagerDidUndoとundoManagerDidRedoに
デバッグポイントをおいて実施してみたが、
何をやってもひっかからなかった。undoのあたりのオペレーションは正常系では実施されないのかも。

今回はここまで。

追記)実は編集からSaveをした後、シェイクでUndo/Redoする模様。
でもそうなる理由はよくわからない。

追記)iphone 開発 サンプル「Simple Undo」を読む。を追加しました。
こちらを読むとCoreDataBooks側も理解できるかもしれません。


|

« iphone 開発 サンプル「CoreDataBooks」を読む。2 | トップページ | retain autorelease ドット演算子 »

iphone開発」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1049865/35462347

この記事へのトラックバック一覧です: iphone 開発 サンプル「CoreDataBooks」を読む。3 :

« iphone 開発 サンプル「CoreDataBooks」を読む。2 | トップページ | retain autorelease ドット演算子 »