問題タブ [nswindowcontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - メインウィンドウを閉じたときにCocoaの子ウィンドウを閉じる
私はココア初心者なので、私のアプローチは間違っている可能性がありますが..
とを使用して(メイン/親ウィンドウがロードされた後)いくつかの子ウィンドウを開くアプリがありNSWindowController
ますinitNibWIthName:
。これは正常に機能します。
しかし、(赤いxを使用して)親ウィンドウを閉じると、これらは開いたままになり、閉じるまでアプリが閉じるのを防ぎます。私はどこにもそれらを閉じていないので、これは理にかなっています。
しかし、どうすればこれを行うことができますか?この時点で呼び出されるイベントがあるはずですが、どこにもそれが何であるかがわかりません。
(など)などの通知applicationWillTerminate
は、閉じるボタンが押されたときではなく、アプリケーションが実際に終了しているときにのみ呼び出されます。
WM_CLOSE
Windowsタイプのメッセージに似たものを探していると思います。
cocoa - 10.5 で NSWindowController の showWindow を 2 回呼び出さなければならないのはなぜですか?
ペン先からウィンドウをロードして画面に表示するために使用している NSWindowController のサブクラスがあります。以下は、ウィンドウを表示したいときに呼び出されるコードです。10.6 では showCustomWindow が呼び出されるとウィンドウが表示されますが、10.5 ではウィンドウを表示するためにこのメソッドを 2 回呼び出す必要があります。
ウィンドウには「起動時に表示」がチェックされており、チェックを外しても違いはないようです。
編集:私が抱えていた問題は、NSWindowController または showWindow に関連していないことに気付きました。私はそれを正しく設定しました。ただし、すべてのクラスがawakeFromNibを実装しているわけではないことがわかりました。私のNSViewサブクラスの1つ(ロードしようとしていたペン先にありました)で、[super awakeFromNib]を呼び出していましたが、「セレクターに応答しません」というメッセージが表示されました(ただし、10.5でのみ奇妙です)。したがって、[super awakeFromNib] を取り出すこともできましたが、できればより堅牢なものを選択しました。
これにより、ペン先が正常にロードされ、showWindow が適切に動作するようになりました。
objective-c - NSWindowController のサブクラスに TextFields がロードされない
私は 2 番目の設定スタイル パネルに取り組んでいます (ただし、特定のドキュメントに関連する設定です)。 myDocument ファイルが少し大きくなってきているので、別のサブクラス WindowController を実装に使用してみることにしました。
NSWindowController をサブクラス化しました。nib ファイルの所有者は myController です。windowDidLoad と awakeFromNib の両方を実装しています。TabView があり、各 TabView には複数の TextField、ComboBox、2 つの TextView、およびいくつかのボタン (キャンセルと OK) があります。Window、TabView、Cancel、OK ボタンへのポインターは確立されていますが、comboBox、TextField、TextView へのポインターはすべて nil です。
ウィンドウは、TextFields、TextViews、および Buttons のすべてで表示されます。TabView は、ビューを切り替えるために機能しています。すべての TextField を編集できますが、ウィンドウを閉じたときにそれらを初期化したり、情報を取得したりすることはできません。
XCode 3.2 と Objective-C を使用しています。
私は何が欠けていますか?
アラン
cocoa - ドキュメントを閉じずに、ドキュメントのウィンドウを閉じて新しいウィンドウを開く
私のアプリはドキュメントベースですが、「ドキュメント」は1つのファイルではなく、2つのフォルダーで構成されています。ドキュメントの初期ウィンドウには、いくつかのファイルピッカーとボタンが含まれています。アクションはそのウィンドウを閉じ、新しいウィンドウを開いて、2つのフォルダー階層間の操作の結果を表示します。(2つのウィンドウのサイズは大幅に異なります。両方のビューをテーブルのタブビューに保持し、それを切り替えるのは簡単ではありません。)
ファイルピッカーウィンドウを閉じて結果ウィンドウを開くアクションメソッドのコードは次のとおりです。
(問題を解決するために失敗した試みで、保持メッセージと解放メッセージを追加しました。)
私の問題は、最初のウィンドウコントローラにドキュメントを閉じないように指示したにもかかわらず、このアクションメソッドが終了した後にドキュメントが解放されて割り当てが解除されることです。(それは問題を解決するための別の失敗した試みでした。)
では、ドキュメントが消滅することなく、同じドキュメントの最初のウィンドウを別のウィンドウに置き換えるにはどうすればよいですか?
objective-c - NSWindowController を使用してウィンドウを操作する
次のコードがあります。
コントローラを使用してウィンドウの ActivateWindow を変更するにはどうすればよいですか (たとえば、ウィンドウのテキストを変更するなど)? ステップバイステップの指示をいただければ幸いです。ありがとう!
cocoa - NSWindowController の使用方法
私は使用を検討してNSWindowController
いますが、それを機能させる方法がわかりません。どうすれば使い始められますか?
cocoa - CocoaドキュメントベースのアプリケーションのMVC
現在、アプリケーションのリファクタリングと再編成を行っています。モデルとビューの間の分離の一部と、それらのコントローラーが減少していることに気づきました。クリーンアップを行いたいと思います。
私のアプリでは、NSPersistentDocument、NSWindowController、およびモデルクラスといういくつかの主要なクラスを使用しています。
NSPersistentDocumentクラスは、「モデルコントローラー」として機能します。モデルクラスのインスタンスを所有し、モデルとのすべての相互作用を管理します。
NSWindowControllerクラスは、「ビューコントローラ」として機能します。メインウィンドウを所有し、メインウィンドウ内のビューの相互作用を管理します。このクラスは、ウィンドウが定義されているnibファイルのファイルの所有者でもあります。
ここで私が見ている問題は、私が本当の「コントローラー」を持っていないということです。私の現在の設計では、モデルコントローラーとビューコントローラーがお互いを認識している必要があります。2つの間に瞑想オブジェクトがないため、モデルとビューが明確に分離されておらず、複数のビューまたはモデルをサポートすることが問題になります。
既存の両方のコントローラーから、モデルコントローラーとビューコントローラーの間のコントローラーとして機能する新しい「コントローラー」クラスに機能を移動したいと思います。結局のところ、これはまだMVCデザインパターンであり、構造が少し増えています。
ただし、これがCocoaのドキュメントベースのアプリアーキテクチャにどのように適合するかを理解するのは困難です。
私が持っている最大の質問は、この新しいコントローラーオブジェクトをどこでどのように作成するかです。これはCocoaのアーキテクチャにどのように適合しますか?私はCocoaのアーキテクチャと戦っていますか?これを行うためのより良い方法はありますか?
ありがとう。
objective-c - いつ NSDocument を拡張し、いつ NSWindowController を拡張する必要がありますか?
アイテムのリストを含むメイン ウィンドウを保持するアプリケーションがあり、そのウィンドウから不特定の数のウィンドウを開くことができます。これらの各ウィンドウは、モデル オブジェクトの複数のインスタンスを保持でき、それらのインスタンスがドロワーに一覧表示されます。
(メイン ウィンドウ) アイテムのリストを NSDocument に拡張し、他の各ウィンドウに NSWindowController を拡張することで、プロジェクトを開始しました。しかし、機能的には、ユーザーがアプリケーションを起動したときにポップアップする必要があるウィンドウであるにもかかわらず、メイン ウィンドウはブルー ムーンごとに 1 回使用されます。私の「ドキュメント」。
そのため、New、Open、Save などのメソッドの実装に問題が生じています。スーパー クラスで実装する必要があるとマニュアルに書かれているコードを大量に書いていることに気づきました。
私は岐路に立っているので、アプリケーションをどのように実装すればよいのだろうか。メイン ウィンドウを NSWindowController を拡張するクラスにリファクタリングし、メイン メニューを保持する xib から起動する必要がありますか?
精神的なイメージを支援するために、私のアプリケーションは MSN のように動作します。いくつかのアイテムを含むメイン リスト (MSN の連絡先リスト) があり、アイテムをダブルクリックすると、ウィンドウが開きます (チャットを開くユーザー)。私のアプリは、「チャット」ウィンドウごとにモデル オブジェクトの複数のインスタンスを保持することでさらに一歩進み、各インスタンスはドロワー内のテーブルからアクセスできるようになります。
cocoa - Cocoa:プラグインはアプリウィンドウを開くことができません
OsiriX用のプラグインを開発しています。
そのアプリでは、3〜4個のnibファイルがあります。また、プラグインの場合、PluginFilterというファイル(.h&.m)があり、-(long)filterImage:(NSString)menuNameというメソッドがあり、そこからプラグインが実行を開始します。今私の問題は、メインウィンドウを起動するコードを他の.mファイルに戻し、上記の方法を使用してそのファイルを呼び出さなければならないことです。
アプリには複数のnibファイルがあります。私はプラグイン名PluginFilterを持っています:
このメソッドで呼び出されると、プラグインはウィンドウを開く必要があります。ウィンドウコントローラを定義するコードは別のペン先にあります。プラグインでメソッドを呼び出すとfilterimage
、ウィンドウが表示されません。
これが私のfilterImage:
方法です。
メソッドを呼び出しても警告やエラーは発生せず、ウィンドウが表示されないだけです。