2

ユーザーがベースの Cocoa アプリケーションで新しいドキュメントを作成するときにNSDocument、新しいドキュメント ウィンドウに、ユーザーがいくつかの初期ドキュメント パラメータを設定できるシートを表示する必要があります。

ただし、このシートは、[ファイル] > [開く] を介して既存のドキュメントが読み込まれた場合は表示されません。

これを実装するためにフックできる既存のメカニズムはありますか? またはそれを行うための推奨される方法はありますか?

4

2 に答える 2

3

サブクラスのインスタンスがファイルからロードされたものではなく新しいドキュメントを表している かどうを判断するには、オーバーライドする必要があり、それは新しいドキュメントに対してのみ呼び出されます。しかし、残念ながら、呼び出された時点でウィンドウがまだ作成されていないため、そこからシートを開始しても機能しません。NSDocumentinitWithType:error:initWithType:error:

これを機能させるためのミッシング リンクは、代わりに、eg という名前のインスタンス変数newDocumentYESinに設定することinitWithType:error:です。したがって、 への実際の呼び出し[NSApp beginSheet:…]は で行う必要がありwindowDidBecomeKey:ます。また、ウィンドウが再びキーになるたびにシートが再表示されるのを防ぐために、newDocument変数をそこに設定する必要があります。NO

于 2012-12-18T01:17:55.217 に答える
3

サブクラスでオーバーライドinitWithType:error:します。 ドキュメントから(NSDocument Class Referenceを参照):NSDocument

このメソッドをオーバーライドして、新しいドキュメントを作成するときに実行する必要がある初期化を実行できますが、既存のドキュメントを開くときは実行しないでください。

于 2012-12-02T16:55:01.737 に答える