問題タブ [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.
cocoa - 新しいNSWindowControllerを開きます
私はCocoaプログラミングに不慣れです。
メインがNSWindowController
あり、2番目のサブを開きたいNSWindowController
です。とにかくコードを見つけることができないようです。
誰か助けてもらえますか?
iphone - OCMock を使用した NSWidowController のテスト
私は、OCMock を使用して applicationDidFinishLaunching デリゲートを単体テストする方法を考え出そうとしています。私の NSWindowController はここでインスタンス化されており、テストしたいと思います。ここに私のテストコードがあります:
テストを実行すると、次のエラーが表示されます。
「OCMockObject[URLTimerWindowController]: 予期されるメソッドが呼び出されませんでした: showWindow:-[URLTimerAppDelegateTests testApplicationDidFinishLaunching]」
ログに詳細が表示されます。
そのため、NIB の読み込みに失敗していることがわかります。では、単体テスト中にロードしたり、何らかの方法でロードをモックしたりするにはどうすればよいですか? OCMock のドキュメント、ユニット テストに関する Chris Hanson のヒント、および同様の動作をする WhereIsMyMac ソース コードを含むその他のリソースをいくつか確認しました。ウィンドウコントローラーをインスタンス化するための私のアプリケーションは次のとおりです。
どんなヒントでも大歓迎です。
cocoa - NSWindowController の赤い閉じるボタンのイベント
NSWindowController の赤い閉じるボタンをクリックしたイベントを処理するにはどうすればよいですか?
質問する理由は、新しい NSWindowController ウィンドウでビデオを再生していて、ユーザーが赤い閉じるボタンをクリックするとオーディオが再生され続けるため、イベントを使用してビデオを閉じたいからです。
cocoa - サブクラス化された NSWindowController への参照はそのドキュメントを返します - これは正しいですか?
ドキュメントベースのアプリケーションは初めてなので、基本的なことを見逃している可能性があります。インターフェイスにサブクラス化された NSWindowController とモデルにサブクラス化された NSDocument を使用するドキュメント ベースのアプリケーションを作成しました。ドキュメントに従って、makeWindowControllers で windowController を初期化し、その xib をロードします。インターフェイス ビルダーでは、xib の windowController サブクラスが File's Owner として設定されています。ウィンドウ内のビューには、NSOutlineView のサブクラスがあり、NSOutlineView データソースとデリゲートもペン先で参照され、IBOutlets を介して windowController に接続されています。
ドキュメントによると、[windowController ドキュメント] を介して OutlineView データソースからドキュメントにアクセスできるはずです。ただし、OutlineView データソースから (IBOutlet を介して) windowController を参照すると、代わりにドキュメントが表示されます。
これにより、ドキュメントを取得するために OutlineView データソース (windowController の xib の NSObject のサブクラス) にかなり醜いコードが作成されました。
ヘッダー ファイルの IBOutlet は myWindowController を次のように参照します。
簡単に言えば、windowController に接続された IBOutlet が、この状況で代わりにドキュメントを直接取得するのはなぜですか? 上記のコードは機能しますが、機能しないようです。
編集:明確化
objective-c - 別のxibのMyDocumentに属するNSArrayインスタンスにアクセスするにはどうすればよいですか?
私のドキュメントアプリケーションでは、MyDocument.xibで参照したNSArrayControllerをサブクラス化し、そのコンテンツをFileのOwner.entriesにバインドしました。
エントリは、次のようにMyDocumentクラスの属性として公開するNSArrayです。
これは完全に正常に機能します。良い。
これで、NSWindowControllerを介してNSMenuItemを介して開く別の.xib、CSVEntries.xibを設計しました。これも、スムーズに機能します。
この新しいウィンドウにMyDocument.entriesインスタンスのコンテンツをNSTableViewに表示させる方法がわかりません。
私は多くのことを試しましたが、基本的に問題は、CSVEntries.xibに配置したNSArrayControllerをMyDocument.entriesにバインドできないことです。CVSEntries.xibファイルの所有者がMyDocument以外の何かを参照しています(これは論理的だと思います)。
また、CVSEntries.xibを開くNSWindowControllerにNSArrayインスタンスのコピーを追加しようとしましたが、ユーザーがメニューをクリックしたときにのみウィンドウがインスタンス化されるため、空の配列になってしまいました。
インターネットで検索しましたが、適切な答えが見つかりませんでした。問題に対処する適切な方法を見つけたいと思います。2つのウィンドウが相互に通信でき、共通の親(NSApplicationインスタンス)にアクセスできると確信していますか?
すべての初心者の質問、私は知っています:)
アップデート
私はどこを見るべきかを理解したと思いますが、それでもどのようにすべきかはわかりません。2番目のウィンドウのファイルの所有者がMyDocumentであることを確認する必要があると思いますが、NSWindowController initWithWindowNibName:owner:MyDocumentインスタンスを所有者として指定する方法がわかりません。xibファイルでのみ指定するファイルの所有者は十分ではないようです。
アップデート2
うーん...NSDocumentサブクラス(デフォルトはMyDocument)によって両方ともインスタンス化された2つのNSWindowControllerインスタンスが必要だと思い始めています。これらを配置すると、NSWindowControllerの両方がMyDocument.entries NSArrayにアクセスできるようになり、2つのwindowsxibファイルをFileのOwner.entriesにバインドできるようになります。
誰かがこれを確認できますか?ありがとう。
objective-c - NSWindowController は初期化時にウィンドウを非表示にしていませんか?
2 つの異なる xib に対応する 2 つの NSWindowControllers を持つ NSDocument サブクラスがあります。
Document-Based Application Guide に従って、document.m 実装に以下を追加しました。
問題は、2 番目のウィンドウ コントローラー csvWindowController で最初にそのウィンドウを非表示にすることです。後でウィンドウの同じインスタンスを表示します。そうするために私は書いた:
しかし、ウィンドウはそこにあり、現れています。
VisibleAtLaunch にフラグが立てられていないこと、コンソールにメッセージが正しく表示されていること、および変更しても次のことをしないでください。
結果は同じで、ウィンドウが表示されます。
どんな助けでも大歓迎です、ありがとう:)
cocoa - NSPanelでのコントロールの初期化
アプリにNSPanelがあり、データエクスポート機能として使用しています。
パネルが最初に表示されたときに、パネルのコントロールを初期化するにはどうすればよいですか?(つまり、NSDefaultsを使用します)。デフォルト設定を復元できるウィンドウ/パネルが開いたときに発生するイベントはないようです(基本的にはNSPopupButtonの値を復元するだけです)。
現在、AppDelegateクラスで「[NSAppbeginSheet...]」を使用してパネルを開いています。代わりにNSWindowControllerサブクラスを使用する必要がありますか?
objective-c - nib を管理するための NSViewController または NSWindowController
グッド プラクティスとリソースの使用法 (メモリなど) に関しては、NSViewController または NSWindowController のいずれかが私がやろうとしていることを満たす場合、どちらを使用するのが望ましい方法ですか。別のニブから別のニブを開く。どちらかを使用して達成できます。唯一の違いは、以下のインスタンス化構文と呼び出し構文です (initWithNibName 対 initWithWindowNibName および [nib ビュー] 対 [nib showWindow:sender])。
コメントはありますか?
objective-c - NSWindowControllerのshowWindowによるメモリリーク:
私はしばらくの間、次のリークに苦しんでいます。Instrumentsを介して、次のコードブロックに絞り込みました。
ブロックは次のように呼び出されます。
recipient
NSStringはどこにありますか。
そして、ここに機器からのバックトレースがあります:
windowControllers
メソッドでNSMutableArray
割り当てられapplicationDidFinishLaunching
、解放されdealloc
ます。
ではNewMessageWindowController
、以下を使用して、ウィンドウが閉じようとしていることをアプリデリゲートに通知し、コントローラーを保持する必要がなくなったことを通知します。
アプリデリゲートのメソッドは次のようになります。
前後の配列をログに記録することは、私が期待する方法です。コントローラはウィンドウが閉じる前にそこにあり、ウィンドウが閉じると削除されます。
窓を閉めると、機器が漏れを拾います。開いている間は、すべてが正常に見えます。期待どおり、DeallocがNewMessageWindowControllerで呼び出されていることに注意してください。リークはコントローラー自体を問題として報告していません。代わりに、リークしているオブジェクトはNSCFStringであり、上記のコードから発生しているだけです。
Build and Analyzeは何も検出していません。また、ウィンドウコントローラー/ウィンドウを作成/表示するコードのブロックでメモリ管理が正常に行われていると確信しています。
奇妙なことに、キーボードを使用してウィンドウを閉じた場合にのみリークが発生します。赤い閉じるボタンをクリックしても、Instrumentsは何も検出しません。
最後に、Instrumentsは、そのコードブロックが責任を負うことを常に示しているわけではありません。そのような場合、Instrumentsで私のコードは参照されていません。すべてAppKitのようです。繰り返しますが、これはキーボードを使用してウィンドウを閉じる場合のみです(cmd-w)。
何か案は?
objective-c - NSWindowController showWindow が他の Mac で問題を引き起こす
新しい Mac アプリのベータ テストを行っています。これは、私の 2 台の MacBook Pro と、別のベータ テスターの iMac でうまく動作します。しかし、他の 2 人のベータ テスター (どちらも私とまったく同じ osx、10.6.7 を使用) では、起動時にアプリ ウィンドウが開きません。
コンソール ログを調べたところ、NSWindowController のサブクラスである MainWindowController クラスの showWindow 呼び出しに問題が絞り込まれました。
showWindow 呼び出しは、すべての viewController の awakeFromNib メソッドの呼び出しをトリガーし、これはすべて正しく行われているように見えますが、showWindow が戻る直前に、このメッセージがアプリからコンソールに送信されます。
私の Mac ではこのバグを再現できないため、このバグを修正するのは非常に難しいと感じています。
どんな洞察も大歓迎です。