問題タブ [nsarraycontroller]

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.

0 投票する
1 に答える
1679 参照

objective-c - NSDictionary の「allValues」配列へのバインド

バインディングについて何か誤解していますか? (NSArrayController のコンテンツ) を NSDictionary の「allValues」配列にバインドすると、空であると認識されます。同じ NSDictionary の「allValues」配列に設定したプロパティを持つランダム オブジェクトにバインドすると、正常に動作します。

これは予期された動作ですか、それとも何か間違ったことをしていますか? さらに、これが予想される場合、これに対処する標準的な方法は何ですか? プロパティに配列を保持するためだけに比較的目的のないオブジェクトを作成して、それらにバインドできるようにするのは醜いようです。

0 投票する
2 に答える
414 参照

cocoa - 配列コントローラーを「派生」属性にバインドする - KVO の問題?

くだらないタイトルでごめんなさい。

人の子供の名前を表示するシンプルな UI を想像してみてください...

最初は Person が 1 つしかなかったので、配列コントローラーを作成して appDelegate.person1.children にバインドしました。これはうまく機能し、名前を表示するためにテーブル列をバインドしました。

ただし、「person1」ではなく、AppDelegate で維持される配列または人が存在するように、プログラムを拡張しました。ただし、 person1 属性を保持し、それを使用してリストの最初の項目を返すことができると考えました。

すべてが (実行時に)正しく作成されていることを確認しましたが、バインドされたテーブル列に person1 の子供の名を表示することができません。

KVOと何か?人の配列が変更されたときに person1 (したがって UI) が変更されることをテーブルが認識していることを確認するにはどうすればよいですか?

ありがとう

0 投票する
2 に答える
2641 参照

core-data - 単一のウィンドウ インターフェースで複数のビュー コントローラー間で選択をバインドする

2 つのビュー コントローラー間でいくつかの NSArrayControllers を接続する方法に頭を悩ませている問題があります。ソース リスト テーブル ビューの選択内容を同期して、2 番目の詳細ビュー コントローラーの値を更新したいと考えています。

Cocoa Dev Central Build A Core Data Tutorialを出発点として使用していますが、2 つの NSViewControllers を含む NSWindowController があるようにアーキテクチャを分解しました。1 つは左側の投稿テーブル用、もう 1 つは投稿の詳細用です。権利。

NSWindowController サブクラスには、Post エンティティにバインドされた NSArrayController と、次を指す読み取り専用の managedObjectContext アクセサーがあります。[[NSApp delegate] managedObjectContext]

次に、メソッドで 2 つのビュー コントローラーを初期化しますwindowDidLoad

MDVCPostsListViewControllerPost エンティティにバインドされた NSArrayController と、親ウィンドウ コントローラーの管理オブジェクト コンテキストにバインドされたその管理オブジェクト コンテキストを持ちます (すべて Interface Builder を介して)。

MDVCPostDetailViewControllerには、ウィンドウ コントローラーのマネージド オブジェクト コンテキストにバインドされた NSObjectController と、 を介してウィンドウ コントローラーにバインドされたコンテンツ オブジェクトがありますpostsListsViewController.postsArrayController.selection。これは本当に厄介なハックのようです。

MDVCPostsListViewControllerのテーブル ビューで選択を変更すると、 で選択された値が更新されるようにするにはどうすればよいMDVCPostDetailViewControllerですか? 近づいたような気がしますが、何が欠けているのか、どのルートをたどるのが最善なのかわかりません。postsListsViewController.postsArrayController.selectionバインディングは非常にハッキーだと思います。うまくいけば、より良い方法があります。

説明を読むだけでなくコードを見ることを好む人のために、これを示すサンプル プロジェクトをアップロードしました。私のサイトhttp://www.secondgearsoftware.com/attachments/stackoverflow_objectcontroller.zipから入手できます。

0 投票する
2 に答える
597 参照

objective-c - NSArrayController の setSelectsInsertedObjects が実際に選択されていない

Interface Builder で setSelectsInsertedObjects を YES に設定して、NSUserDefaults コントローラーにバインドされた NSArrayController がありますが、[追加] をクリックすると、新しく追加されたオブジェクトが選択されるのではなく、以前に選択されていたオブジェクトが選択解除されます。

私は何が欠けていますか?

0 投票する
1 に答える
1289 参照

cocoa - Core Data を使用して、iTunes スタイルのソース リストを NSTableView にバインドするにはどうすればよいですか?

私のアプリケーションには iTunes スタイルのインターフェイスがあります。左側にはさまざまなライブラリとプレイリストを含むソース リスト (NSOutlineView) があり、インターフェイスの右側には "プレゼンテーション" の情報を表示する NSTableView があります。iTunes と同様に、ライブラリまたはプレイリストが選択されているかどうかにかかわらず、テーブル ビューに同じ種類の情報 (タイトル、作成者、作成日など) を表示しています。

代替テキスト

現在、NSTableView に接続されている NSArrayController があり、ソース リストで選択された内容に基づいてフェッチ述語を設定していました。プレゼンテーションコア データ エンティティの「タイプ」フィールドでフィルタリングするようにフェッチ述語を設定するだけでよいため、これはライブラリを選択するときにうまく機能します。ただし、プレイリストのフェッチ述語を調整しようとすると、プレイリスト内の順序に追いつくためにプレイリストとプレゼンテーションの間にテーブルがあるため、フェッチ述語を設定する方法がないように見えます。Apple docs によると、これらのタイプの述語は Core Data では実行できません (基本的に複数の内部結合は実行されません)。以下は、私のデータモデルの関連部分です。

代替テキスト

データ モデルの設定が間違っていますか? NSArrayController を削除して、NSTableView の接続を手動で処理する必要がありますか? 簡単な修正があるのか​​、それとも本当に設計上の欠陥があるのか​​ を把握しようとしています.

0 投票する
1 に答える
1102 参照

cocoa - NSTableView、NSArrayController、およびキーを押した後にのみリロードしますか?

私は次の状況にあります:

  1. NSTableViewを含む最初のウィンドウ内に1つのカスタムビューがあります。
  2. 最初のウィンドウ内のテーブルビューの選択の背後にある現在のオブジェクトのフォームとして機能する2番目のウィンドウがあります。

詳細:

  • 基本的に2番目のウィンドウを開くNSTableViewにsetDoubleAction:動作を実装しました
  • テーブルビューは、(サブクラス化された)NSArrayControllerのarrangedObjectsにバインドされます
  • 2番目のウィンドウ(ダブルクリックで開く)の特定のインターフェイス要素は、NSArrayControllerの選択にバインドされます
  • NSArrayControllerをサブクラス化し、次の関数を変更しました。

最初に私はaddObjectを変更しました:(またはadd:、これは実際には重要ではありません):

次に、removeを変更しました。

  • プリファレンスシートを開くアクションは、1つのライナーです。[NSApp beginSheet:preferenceWindow modalForWindow:[_preferenceView window] modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
  • ユーザーがリターンキー/OKボタンを押した後に実行されるコードも複雑ではありません。

アレイコントローラの現在のコンテンツをディスクに保存し、2番目のウィンドウを閉じます。

最後に、これが私の問題/質問です

2番目のウィンドウでリターンキーを押すと、ウィンドウが閉じ、データが保存され、NSTableViewがそれ以上の操作なしで適切に再ロードされます。しかし、マウスでOKボタンを押しても、何も起こらないようです。ここに興味深い部分があります。2番目のウィンドウが消えた後、最初のウィンドウのテーブルビューで別の行を選択すると、以前に選択した行(読み取り:更新されたオブジェクト)が適切に再読み込みされ、2番目に編集したコンテンツが表示されます選択範囲にバインドされたインターフェイス要素を持つウィンドウ。

基本的に私の実装は機能しますが、ユーザーがマウスを使用してウィンドウを閉じる場合は機能しません。

私が見つけられる唯一の違いはcurrentEventですが、これがこの単純なアプリケーションの動作をどのように変えることができるか想像できません。

  • マウスでOKボタンを押すと:NSEvent: type=LMouseUp loc=(563.055,30.1484) time=58450.2 flags=0 win=0x0 winNum=5371 ctxt=0x0 evNum=8093 click=1 buttonNumber=0 pressure=0 subtype=NSTabletPointEventSubtype deviceID=0 x=19469 y=15838 z=0 buttons=0x0 pressure=0.000000 tilt={0.453108, -0.140629} rotation=0.000000 tangentialPressure=0.000000 vendor1-3=(0, 0, 0)
  • Returnキーを押すと:NSEvent: type=KeyDown loc=(0,300) time=58474.8 flags=0 win=0x0 winNum=5371 ctxt=0x0 chars=" " unmodchars=" " repeat=0 keyCode=36

問題を解決する方法はありますか?

0 投票する
1 に答える
231 参照

objective-c - 異なるコンテンツを持つ複数のNSTableViewがあります-データを表示しません

2つのTableViewがあります(1つはSourceList、もう1つはNormal TableView)。私はArrayControllersを使用しておらず、次のものを使用しています。

これにより、行の内容が表示されます。しかし、問題は、TableViewが1つだけではなく、複数あることです。そこで、このコードを含む別のNSObjectを追加しました。ただし、コンテンツは表示されません。

ArrayControllersを使用する必要がありますか?または、別の方法で2番目のTableViewのコンテンツを表示できますか?

0 投票する
1 に答える
7440 参照

core-data - CoreDataを使用してエンティティにレコードを挿入および変更する

インターネットで質問の答えを見つけようとしましたが、見つかりませんでした。コアデータに、Value属性(整数)とDate属性を持つ単純なエンティティがあります。.mファイルで2つのメソッドを定義したいと思います。

最初の方法はADD方法です。整数値(ユーザーがUIに入力)と日付(デフォルトでは現在の日付)の2つの引数を取ります。次に、引数に基づいてエンティティにレコードを挿入します。

2番目の方法は増分方法のようなものです。日付をキーとして使用してレコードを検索し、そのレコードの整数値をインクリメントします。

これらのメソッドの書き方がわかりません。(xibファイルのテーブルにアレイコントローラーがあると仮定します)

0 投票する
1 に答える
1434 参照

cocoa - NSPopUpButtonCellに文字列値を入力する

NSPopUpButtonCellに文字列のリストを入力しようとしています。-(init)で、ポップアップボタンに必要な値をNSArrayに入力します。これをIBで追加したNSArrayControllerに接続するにはどうすればよいですか?アプリデリゲートは、接続するためにIBOutlet NSArrayControllerが必要ですか、それともバインドする方法がありますか?

また、NSArrayControllerをNSPopUpButtonCellにバインドする場合、どのコンテンツにバインドしますか?コンテンツまたはコンテンツ値?

ヨルジ

0 投票する
3 に答える
1757 参照

objective-c - NSTableViewのカスタムNSCellでバインディングを使用してモデルオブジェクトを公開する

私は、比較的一般的なタスクだと思うことを実行しようと奮闘しています。をNSTableView介してその配列にバインドされているがありNSArrayControllerます。アレイコントローラのコンテンツは、モデルクラスのNSMutableArray1つ以上のインスタンスを含むに設定されています。NSObject方法がわからないのは、NSCellバインディングに適した方法でサブクラス内のモデルを公開することです。

説明のために、オブジェクトモデルは、名、名前、年齢、性別で構成される人物であると言います。したがって、モデルは次のようになります。

明らかに、クラスに適切なセッター、ゲッターinitなど。

私のコントローラークラスでは、、、および:を定義NSTableViewNSMutableArrayますNSArrayController

Interface Builderを使用すると、モデルを適切な列に簡単にバインドできます。

myPersonArray --> myPersonArrayController --> table column binding

これは正常に機能します。したがって、余分な列を削除し、NSArrayController(各行との間の関連付けを作成して維持する)にバインドされている1つの列を非表示のままNSArrayControllerにして、1つの非表示のNSTableView列と1つの非表示の列に移動します。NSCellサブクラスを作成し、適切な描画メソッドを配置してセルを作成します。私のawakeFromNib中で私はカスタムNSCellサブクラスを確立します:

これも、描画の観点からは問題なく機能します。カスタムセルが列に表示され、アレイコントローラー内のすべての管理対象オブジェクトに対して繰り返されます。オブジェクトを追加したり、アレイコントローラからオブジェクトを削除したりすると、それに応じてテーブルが更新されます。

しかし...私は自分のオブジェクトが私のサブクラスPersonModel内から利用できるだろうという印象を受けました。NSCellしかし、私はそれに到達する方法がわかりません。セッターとゲッターを使用してそれぞれを設定したくないのは、配列コントローラーからデータを参照するのNSCellではなく、データを格納することでモデルの概念全体を壊しているためです。NSCell

そして、はい、私はカスタムを持っている必要があるNSCellので、複数の列を持つことはオプションではありません。ここからどこへ?

GoogleとStackOverflowの検索に加えて、私はAppleのドキュメントで必須のウォークスルーを実行しましたが、答えが見つからなかったようです。私は茂みの周りを打ち負かす多くの参照を見つけましたが、何も含まれていませんNSArrayController。コントローラーは、モデルエンティティの他の要素(マスター/詳細シナリオなど)にバインドするときに非常に簡単になります。Core Dataを使用しているときに、多くの参照(回答はありませんが)も見つかりましたが、CoreDataを使用していません。

当たり前のように、私は提供できるどんな援助にも非常に感謝しています!