問題タブ [nsviewcontroller]
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 - NSMutableArrays は null です
私は NSViewController サブクラスを持っています:
私の-init
方法では、両方の配列が で作成され+new
、それぞれに 1 つのオブジェクトが与えられます。その後、 を呼び出すとNSLog(@"%@, %@", entities, tiles);
、期待どおりの結果が得られます。
ただし、同じログ関数を呼び出すビューのボタンをクリックすると、次のように吐き出されます。
私は何日もの間、何らかの形でこの問題に悩まされてきました。なぜ世界で配列がnullなのですか?
もっと多くのコードを投稿できることをうれしく思います。お知らせください!
インターフェース:
私の-init
方法:
cocoa - ビューが NSViewController によって提供される場合、ビューベースの NSTableView で自動レイアウトを使用する方法は?
私の質問を説明するために、次のサンプルアプリを作成しました。
左側のビューはプレースホルダー ビューです (Interface Builder で追加)。アプリが読み込まれると、NSViewController によって管理されるサブビューを追加します。NSViewController は、それぞれが NSView であるさまざまな色の四角形を描画し、これらの色付きのビューのレイアウトは、プログラムで作成され
-loadView
、コントローラーのメソッドに追加された制約によって管理されます。右側のビューは NSTableView (Interface Builder で追加) です。アプリが読み込まれると、同じ NSViewController クラスを使用して、テーブル ビューにビューを提供します (1 行のみが追加されます)。
サブビューをプレース ホルダー ビューに追加するときに、さらに 2 つの制約を追加します。
これらの制約により、サブビューのフレームがスーパービューの境界と等しくなるように設定されます。すべてが良いです。
ただし、デリゲート メソッドを使用して NSTableView のビューを提供すると-tableView:viewForTableColumn:row:
、ビューはまだテーブルに追加されていません。そのため、スーパービューがないため、(まだ) 制約をビューに追加することはできません。これが、テーブル ビューのビューがテーブル ビュー セルと同じ境界を持たない理由です。
私の質問は、テーブルビューに提供するビューに制約を追加するにはどうすればよいですか? テーブル ビューがビューを追加した後、ビューに再度アクセスできますか? これは少しハックっぽいです。
AppDelegate.h のソース コード、
および AppDelegate.m、
@jrturton を更新
制約を追加すると-(void) tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView forRow:(NSInteger)row
うまくいきました。
@スウォークナー
私が追加した制約は非常に基本的なもので、
objective-c - NSViewController の NSScrollView
初めての OSX アプリを作成しています。私のappDelegateには、NSViewControllerのcontentViewを持つウィンドウがあります。この NSViewController には、起動時に表示されるカスタム ビューがあります。NSScrollView を NSViewController のプロパティとして追加し、xib で正しい位置に配置して、ファイルの所有者 (NSViewController) を参照しました。ビューが表示されている場合、scrollView は表示されません。scrollView を含むコードは次のとおりです。
viewController の .h で:
viewController の .m で:
誰かがそれを助けることができれば、それは素晴らしいことです! ありがとう!
objective-c - [XXXX PerformSelector:withObject:]:割り当て解除されたインスタンスに送信されたメッセージ
NSViewからIBActionを起動すると、このエラーメッセージが表示されます。
XXXXはAccountTableCellViewControllerです。他の問題を解決できる場合に備えて、抽象的な名前を付けました。
コンポーネントの構造は次のとおりです。
このビューをロードするアプリがあります。
このNSViewをセルとして使用する
TableViewは次のようにバインドされています。
内容は次のように表示します(コントローラーをどこにもリンクしないことに疑問があります)
何か案が?
cocoa - awakeFromnibを何度も呼び出す方法、setNeedsDisplayを使用していますが、機能していません
ビューの読み込み中に初めてawakeFromNibが呼び出されましたが、メソッドを介して再度awakeFromNibを呼び出したいと思います。
[view setNeedsDisplay:YES]を試しました。しかし、それは再びawakeFromNibを呼び出していません
なぜawakeFromnibを呼び出さないのかを誰かが提案できますか?
cocoa - NSPopoverの配置方法
NSViewController を使用して NSView のインアウト ビューを交換する OSX アプリケーションがあります。ビューの 1 つは NSOutlineView です。ユーザーが Outlineview の行をダブルクリックしたときに NSPopover を表示させたいと考えています。現在、ポップオーバーを表示するには、次のアプローチを使用しています。
これにより、アプリの下部に NSPopover が表示されます。これは機能しますが、ポップオーバーを NSOutlineView のクリックされた行の真下に表示できるようにしたいと考えています。入れ替えるすべてのビューは NSViewController によって制御され、NSViewController のビュー プロパティを使用してビューの位置を識別できると考えました。ただし、に置き換える[[NSApp keyWindow] contentView]
とmyViewController.view
、ビューにウィンドウがなく、NSPopover がクラッシュするというエラーが表示されます。明らかに、私は問題を抱えています 1) NSView でクリックされた行のメイン ウィンドウに対する座標を見つける 2) ビューにウィンドウがない理由を理解する。これらの問題を理解するのに役立つ提案があれば、大いに感謝します。
UPDATE 06/02/2013 私はまだ問題に苦しんでいますが、MainWindowController (myControlledView) を介してビューのプロパティにアクセスすると、ビューの正しい座標を取得できることがわかりました。次に、ビューの原点とフレーム サイズを尋ねると、正しい値が得られます。私のVCはカスタムビューをNIBファイルとしてロードし、ロードされたビューの原点を尋ねると(0,0)を取得します。ビューをNIBとしてロードしても、ウィンドウに対するビューの位置は変わらないと思いましたか? ビューの起点を VC に渡して NSPopover を正しく設定することはできますが、これはやや面倒で、NIB がロードされたビューの起点には VC を介して正しくアクセスできると思います。
これは結果に:My origin: 0.000000 0.000000
なり、私が探しているものではありませんが、これは次のとおりです。
正しい原点が得られます。My origin: 176.000000 38.000000
明らかに、私が理解していないビューとウィンドウについて何かがあります。どんな助けでも大歓迎です。
提案と助けをありがとう!乾杯、トロンド
cocoa - ビューまたはコントローラーがドラッグ処理を担当する必要がありますか?
原則として、ドラッグ処理の主な責任は、NSView または NSViewController のどこに属しますか。
ドラッグ操作フックはすべて NSView に含まれているため、NSView が自然な場所のようです。さらに、ビューは何らかの役割を果たす必要があります。なぜなら、ビューは物事がどこにあるかを知っているため、当然、ドラッグが巻き上げられる場所の専門家だからです。
しかし、ドラッグは通常、ドキュメント間またはプロセス間通信に関するものであり、最も具体的には、ファイルを Finder からドキュメントにドラッグすることに関するものです。ドラッグは、モデルに変更または追加をもたらすようにバインドされています。そして、それがコントローラーの仕事です。
最後に、ビューまたはコントローラーのどちらにいるかに関係なく、通常、プロセス内のドラッグを処理してからデータを受け取るための一連のメソッドを追加します。メソッドをビューまたはコントローラーに追加するだけですか、それともポリシー オブジェクトに転送しますか?
xcode - 他のウィンドウから MainMenu.xib を表示
xcode プロジェクトの最初の viewController を別のビュー コントローラに設定しました。ただし、最初のビュー コントローラー内から MainMenu.xib を開きたいと考えています。
これを達成する方法がよくわかりません。
助けてくれてありがとう!
ベスト、ジュリアン
objective-c - プログラムでウィンドウを閉じる
Mac 上のCocoa アプリケーションの場合、関連付けられたボタンをクリックしたときにいくつかのウィンドウを表示する必要があります。これを使用してウィンドウを表示できます:
新しいウィンドウには、Push Button
「キャンセル」と別の「保存」があります。「保存」ボタンが押されたときにデータベースでいくつかのクエリを実行し、「キャンセル」ボタンが押されたときにウィンドウを閉じたい。
ファイルからドラッグしながらウィンドウを閉じることができxib
ます(ウィンドウを右クリックすると「アウトレットメニュー」)
しかし、これを「保存」ボタンに使用することはできません。
試してみ[self performSelector:@selector(performClose:)];
ましたが、エラーメッセージが表示されました:
[AddProductViewController performClose:]: 認識されないセレクターがインスタンス 0x107f64900 に送信されました
同じ[[[self view] window] close];
これを解決する方法がわかりません。これは私の最初の Mac アプリケーションです。