2011年10月28日金曜日
アンドゥの実装について
今はRootViewControllerでアンドゥの実装を検討している。
開発中のソフトは「iOS開発におけるパターンによるオートマティズム」を参考にして組んでいるのだが、残念ながらアンドゥの実装については触れられていない。そこで以下の方針で組んでみたのだが、うまくいきそうだ。
○アンドゥの有効範囲は一画面以内とする
その方がわかりやすいのではないかという事と、メモリ節約の為という二つの理由でそうした。これを実現する為に以下の内容を実装した。
・別画面に遷移する時(ナビゲーションコントローラに別のビューコントローラをプッシュする時)にアンドゥスタックをクリアする
・ビューコントローラが独自のアンドゥマネージャを持つ
・viewDidLoadでアンドゥマネージャを生成し、アンドゥスタックを監視する通知のオブザーバになる
・releaseOutletsでアンドゥマネージャを解放し、アンドゥスタックを監視する通知のオブザーバ登録を解除する(releaseOutletsはdeallocとviewDidUnloadで呼ばれるメソッド)
○ビューコントローラが自分のアンドゥマネージャから通知を受けてアンドゥボタン、リドゥボタンの有効、無効を更新する
・NSUndoManagerCheckpointNotificationを使う
○アンドゥによるテーブルビューの状態変化、ユーザ操作によるテーブルビューの状態変化にはモデルマネージャがデリゲートへ送る通知を利用して対応する
これによりユーザ操作に対応する処理とアンドゥ、リドゥに対応する処理が共通になるメリットがある。デリゲートへの通知を利用すれば、モデルオブジェクトが追加、削除、入替されたのがアンドゥによるものなのか、ユーザ操作によるものなのかを区別する必要はない。(モデルマネージャはモデルオブジェクトの配列を管理し、モデルオブジェクトはデータを保持する)
またモデルオブジェクトを追加、削除、入替するメソッドでは、モデルマネージャに追加、削除、入替を依頼するだけの処理となり、アンドゥ、リドゥする時はアンドゥマネージャにアンドゥ、リドゥを依頼するだけと、とてもシンプルになる。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿