- 2008-12-22 (月) 17:21
- iPhone SDK / Cocoa / Objective-C
詳解Objective-C2.0を見ると、アンドゥ機能を実現するためのクラスNSUndoManagerがFoundation Frameworkに存在すると書いてありました。ところが、XCode上でNSUndoManagerが補完されません。何か設定が必要なのでしょうか。
そこでドキュメントを調べてみるとiPhone OS Technology Overviewに次のような記述が有りました。
Undo management
TheNSUndoManagerclass is not available, and there is no automatic support for undoing operations in iPhone OS.
残念なことに、iPhoneOSにはNSUndoManagerが存在しないようです。
では、iPhone OSでのundoの好ましい実装はどのようになるのかとさらにドキュメントを調べるとCocoa Fundamentals Guideの「What Is A Design Pattern?」に例としてあげられているCommandパターンの中でundo,redoに触れていることが分かりました。CommandパターンはMementoパターンと並んでUndo実装の定石ですので、問題になるのはCommandパターンの実装方法です。
同ドキュメントによると、Commandパターンやタイマー呼び出しなどの為にNSInvocationが用意されていると有ります。NSInvocationは事前にオブジェクト、メッセージ、引数を設定しておき後から実行(Invoke)するためのクラスです。詳しい使い方についてはoomori.com Cocoa Referenceが分かりやすく書かれていました。NSUndoManagerもこのNSInvocationを用いて実装されているようです。
関連する投稿
- Newer: releaseすべきところでdeallocをすると
- Older: switch/caseの中で変数を宣言する
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://iphone-dev.ensites.net/archives/487/trackback
- Listed below are links to weblogs that reference
- NSUndoManagerをiPhoneOSで使いたい from iPhoneアプリ開発ブログ