私は、比較的一般的なタスクだと思うことを実行しようと奮闘しています。をNSTableView介してその配列にバインドされているがありNSArrayControllerます。アレイコントローラのコンテンツは、モデルクラスのNSMutableArray1つ以上のインスタンスを含むに設定されています。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を使用していません。
当たり前のように、私は提供できるどんな援助にも非常に感謝しています!