11

Interface Builder を使用してコントロールを NSArrayController にバインドすると、バインディング インスペクタの [Controller Key] フィールドの下にさまざまなオプションが表示されます。

「arrangedObjects」とは何かを理解し、「選択」とは何かをある程度理解していますが、すべてのオプションとそれぞれをいつ使用するかについての本当に良い説明を見たいと思っています。リストには、selectionIndexes、selectionIndex、selectedObject、sortDescriptors などがあります。これらのオプションの適切な説明を見つけることができませんでした。

ターゲット > 選択にバインドされているボタンに問題があるため、これらのコントローラー キーをより深く理解することが問題のデバッグに役立つことを願っています。

ありがとう!!!

4

4 に答える 4

14

これらは見つけるのが難しいです。それらはさまざまなCocoaの本、さらにはAppleのドキュメントによってどこでも参照されているようですが、それらの説明を1か所にまとめている人は誰もいません。答えは、Appleは各コントローラークラスのドキュメント内でそれらを定義しているということです。

  • NSObjectController(doc
  • NSArrayController(doc
  • NSDictionaryController(doc
  • NSTreeController(doc
  • NSUserDefaultsController(doc

これらのドキュメントも役立ちます。

これらの「コントローラー」オブジェクトの継承は次のようになります(これは、「コントローラーキー」オプションの一部がどこから来ているかを見つけるために重要です)。

NSController -> NSObjectController
NSController -> NSObjectController -> NSArrayController
NSController -> NSObjectController -> NSArrayController -> NSDictionaryController
NSController -> NSObjectController -> NSTreeController
NSController -> NSUserDefaultsController

// Note:  NSController is an abstract class (don't worry about it).  It inherits from NSObject.

特定のクラスのドキュメントで定義されていないコントローラーキーを見つけた場合は、おそらくそのスーパークラスで定義されています。以下は、上記のそれぞれで使用可能なすべてのコントローラーキーです(Xcode 3.2.1、Interface Builder 3.2.1)。

// **NSObjectController**
canAdd
canRemove
isEditable
selectedObjects
selection


// **NSArrayController**
arrangedObjects
canAdd
canInsert
canRemove
canSelectNext
canSelectPrevious
filterPredicate
isEditable
selectedObjects
selection
selectionIndex
selectionIndexes
sortDescriptors


// **NSDictionaryController**
arrangedObjects
canAdd
canInsert
canRemove
canSelectNext
canSelectPrevious
filterPredicate
isEditable
selectedObjects
selection
selectionIndex
selectionIndexes
sortDescriptors


// **NSTreeController**
arrangedObjects
canAdd
canAddChild
canInsert
canInsertChild
canRemove
isEditable
selectedObjects
selectedNodes
selection
selectionIndexPath
selectionIndexPaths
sortDescriptors


// **NSUserDefaultsController**
hasUnappliedChanges
values

したがって、必要なものをリストから見つけ、そのコントローラークラスのドキュメントを調べると、その定義が見つかります。そこにない場合は、おそらくそのスーパークラス(NSObjectControllerなど)のドキュメントで定義されています。

于 2010-03-13T23:39:59.097 に答える
8

コントローラー キーは、バインド先の (コントローラー オブジェクトのプロパティ) のキーです。モデル キー パスは、バインドされたオブジェクトがモデル オブジェクトに、文字列や画像などのより基本的なオブジェクト、または他のモデル オブジェクト (つまり、モデルへのドリル ダウン) を要求できるキー パスです。

例: 配列コントローラーに Person オブジェクトがあり、各 Person にname. arrangedObjectsテーブルの列を配列コントローラ、コントローラ キー(それによってモデル オブジェクトを取得)、モデル キー パスname(それによって値オブジェクトを取得) にバインドします。

より複雑な例: Departments の配列コントローラーがあるとします。各部門には人 (部門の従業員) が含まれます。People 配列コントローラーを Departments コントローラー、コントローラー キーarrangedObjects(Department モデル オブジェクトを取得)、モデル キー パス@distinctUnionOfObjects.employees(Person モデル オブジェクトを取得) にバインドしてから、テーブル列を People コントローラー、コントローラー キーarrangedObjects、モデル キー パスにバインドできます。 name.

そのテーブルは、あなたの会社で働く人々のためのものです。将来の従業員の別のテーブルがある場合は、それらの Person オブジェクトも作成できますが、それらは部門に属していないため、既存の従業員のテーブルには表示されません。それらを採用すると、1 つまたは複数の部門に追加されます。employees次に、配列コントローラーがすべての部門を監視しているため、People 配列コントローラーに自動的に表示されます。

于 2009-11-21T02:37:15.640 に答える
7

Cocoa Bindings Referenceが必要です。

于 2009-11-21T00:26:03.007 に答える
2

Interface Builder User Guideを見てください。「接続とバインディング」セクションがあり、表 7-1 には次のように書かれています。

コントローラ キー: NSController オブジェクトの属性。NSController オブジェクトにバインドする場合、このフィールドを使用してキー パスの最初のエントリを選択します。このフィールドに関連付けられたメニューには、便宜上、選択したコントローラー オブジェクトで使用可能なプロパティが表示されます。プロパティの名前を入力するか、表示されたリストから選択することができます。

于 2010-05-01T09:52:45.353 に答える