ユーザーがベースの Cocoa アプリケーションで新しいドキュメントを作成するときにNSDocument
、新しいドキュメント ウィンドウに、ユーザーがいくつかの初期ドキュメント パラメータを設定できるシートを表示する必要があります。
ただし、このシートは、[ファイル] > [開く] を介して既存のドキュメントが読み込まれた場合は表示されません。
これを実装するためにフックできる既存のメカニズムはありますか? またはそれを行うための推奨される方法はありますか?
ユーザーがベースの Cocoa アプリケーションで新しいドキュメントを作成するときにNSDocument
、新しいドキュメント ウィンドウに、ユーザーがいくつかの初期ドキュメント パラメータを設定できるシートを表示する必要があります。
ただし、このシートは、[ファイル] > [開く] を介して既存のドキュメントが読み込まれた場合は表示されません。
これを実装するためにフックできる既存のメカニズムはありますか? またはそれを行うための推奨される方法はありますか?
サブクラスのインスタンスがファイルからロードされたものではなく新しいドキュメントを表している かどうかを判断するには、オーバーライドする必要があり、それは新しいドキュメントに対してのみ呼び出されます。しかし、残念ながら、呼び出された時点でウィンドウがまだ作成されていないため、そこからシートを開始しても機能しません。NSDocument
initWithType:error:
initWithType:error:
これを機能させるためのミッシング リンクは、代わりに、eg という名前のインスタンス変数newDocument
をYES
inに設定することinitWithType:error:
です。したがって、 への実際の呼び出し[NSApp beginSheet:…]
は で行う必要がありwindowDidBecomeKey:
ます。また、ウィンドウが再びキーになるたびにシートが再表示されるのを防ぐために、newDocument
変数をそこに設定する必要があります。NO
サブクラスでオーバーライドinitWithType:error:
します。
ドキュメントから(NSDocument Class Referenceを参照):NSDocument
このメソッドをオーバーライドして、新しいドキュメントを作成するときに実行する必要がある初期化を実行できますが、既存のドキュメントを開くときは実行しないでください。