私は、比較的一般的なタスクだと思うことを実行しようと奮闘しています。をNSTableView
介してその配列にバインドされているがありNSArrayController
ます。アレイコントローラのコンテンツは、モデルクラスのNSMutableArray
1つ以上のインスタンスを含むに設定されています。NSObject
方法がわからないのは、NSCell
バインディングに適した方法でサブクラス内のモデルを公開することです。
説明のために、オブジェクトモデルは、名、名前、年齢、性別で構成される人物であると言います。したがって、モデルは次のようになります。
@interface PersonModel : NSObject {
NSString * firstName;
NSString * lastName;
NSString * gender;
int * age;
}
明らかに、クラスに適切なセッター、ゲッターinitなど。
私のコントローラークラスでは、、、および:を定義NSTableView
しNSMutableArray
ますNSArrayController
。
@interface ControllerClass : NSObject {
IBOutlet NSTableView * myTableView;
NSMutableArray * myPersonArray;
IBOutlet NSArrayController * myPersonArrayController;
}
Interface Builderを使用すると、モデルを適切な列に簡単にバインドできます。
myPersonArray --> myPersonArrayController --> table column binding
これは正常に機能します。したがって、余分な列を削除し、NSArrayController
(各行との間の関連付けを作成して維持する)にバインドされている1つの列を非表示のままNSArrayController
にして、1つの非表示のNSTableView
列と1つの非表示の列に移動します。NSCell
サブクラスを作成し、適切な描画メソッドを配置してセルを作成します。私のawakeFromNib
中で私はカスタムNSCell
サブクラスを確立します:
MyCustomCell * aCustomCell = [[[MyCustomCell alloc] init] autorelease];
[[myTableView tableColumnWithIdentifier:@"customCellColumn"]
setDataCell:aCustomCell];
これも、描画の観点からは問題なく機能します。カスタムセルが列に表示され、アレイコントローラー内のすべての管理対象オブジェクトに対して繰り返されます。オブジェクトを追加したり、アレイコントローラからオブジェクトを削除したりすると、それに応じてテーブルが更新されます。
しかし...私は自分のオブジェクトが私のサブクラスPersonModel
内から利用できるだろうという印象を受けました。NSCell
しかし、私はそれに到達する方法がわかりません。セッターとゲッターを使用してそれぞれを設定したくないのは、配列コントローラーからデータを参照するのNSCell
ではなく、データを格納することでモデルの概念全体を壊しているためです。NSCell
そして、はい、私はカスタムを持っている必要があるNSCell
ので、複数の列を持つことはオプションではありません。ここからどこへ?
GoogleとStackOverflowの検索に加えて、私はAppleのドキュメントで必須のウォークスルーを実行しましたが、答えが見つからなかったようです。私は茂みの周りを打ち負かす多くの参照を見つけましたが、何も含まれていませんNSArrayController
。コントローラーは、モデルエンティティの他の要素(マスター/詳細シナリオなど)にバインドするときに非常に簡単になります。Core Dataを使用しているときに、多くの参照(回答はありませんが)も見つかりましたが、CoreDataを使用していません。
当たり前のように、私は提供できるどんな援助にも非常に感謝しています!