3

[self undoManager]ドキュメントベースのアプリで、子ウィンドウがゼロになるのはなぜですか?

親ウィンドウの元に戻るマネージャーを参照するべきではありませんか?親ウィンドウで、UNDOマネージャーの実際のアドレスを取得します!

4

2 に答える 2

4

undoManagerNSWindowControllerのメンバーではありません。これは単なるNSDocumentの「機能」です。

NSDocumentドキュメントからの抜粋:...ドキュメントは、ウィンドウの編集済みステータスを管理し、元に戻す操作とやり直し操作を実行するように設定されています。...。

セクション「NSDocumentのサブクラス化」:

....サブクラスは、ドキュメントウィンドウを管理するウィンドウコントローラーの作成と、元に戻すおよびやり直しの実装も担当します。...。

作成したコードは、存在しないオブジェクトにメッセージを送信するため、他の強い型の言語では機能しません。ここでコンパイラの警告が表示されるはずです。

お役に立てれば、

一番、

Flo

于 2012-06-27T10:34:41.283 に答える
0

Floの答えは良い出発点でした。しばらくして、レスポンダーチェーンが何らかの形で機能していることが判明しました(または、私かもしれません:-))。

によって制御される子ウィンドウには、このウィンドウに関連付けられたドキュメントを返すようNSWindowControllerに、自動的に(??)ドキュメントプロパティが必要です。[self document]そこからUndoマネージャーを引き出すのは簡単です。

ただし、私のアプリケーション(および小さなテストアプリでも)では、このドキュメントは設定されていません。ドキュメント([newWindow setDocument:self])内から手動で設定すると、元に戻す/やり直しアクションの登録、メニューバーなど、すべてが機能します。

于 2012-06-27T14:46:23.623 に答える