アプリの印刷内容をカスタマイズする場合、NSDocumentのprintOperationWithSettings:error:
やprintDocumentWithSettings:...
をオーバーライドすることになりますが、デフォルトの設定ではこのメソッドが呼ばれないケースがあります。
メニューバーの「ファイル > 印刷...」を選択しても、ショートカットキー「Command+P」を利用しても、なぜかフォーカス中のViewの印刷機構が働いてしまいます。
XIB側のアクションを編集する必要がある
XIBやStoryboardで自動生成されるメニューバーの印刷ボタンには「print:
」アクションがデフォルトで割り当てられています。これをNSDocumentの「printDocument:
」に繋げば、ちゃんとprintOperationWithSettings:error:等が呼ばれるようになります。
プロジェクト作成時に「Create Document-Based Application」オプションを指定している場合は、きちんとprintDocument:が割り当てられるため、今回のような問題は起こりません
print:だとダメな理由
メニューバーに設定されたアクションは、基本的にファーストレスポンダーに対して投げられます。要はフォーカス中のViewに対して優先的にアクションが渡るわけですね。「print:」アクションはNSViewが既に実装済みのメソッドであるため、NSDocumentにはprintDocument:はおろか、print:アクションすら渡ってくることは無いのです。
もし今後、メニューバーのアクションを独自に設定する際には、NSView側のメソッド名と被っていないかに注意すると良いでしょう。