0

ここに示すように、ココアバインディングを使用してNSTableViewと配列コントローラーをセットアップしました: apple_ref/doc/uid/10000026i-CH13-SW3

applicationDidFinishLaunching 中のアプリ デリゲートには、次のスニペットがあり、配列を初期化し、オブジェクトで埋めています。

array = [[NSMutableArray alloc] init];

SomeObject* foo = [[Object alloc] init];
foo.text = @"sup";
[array addObject:foo]; //Repeat this a few times

ただし、アプリをビルドして実行すると、空のテーブルになります。ただし、ボタンを配列コントローラーの add: 入力にバインドし、実行時にクリックすると (これにより、配列とテーブルに新しいオブジェクトが追加されます)、テーブルには最初に新しいオブジェクトが表示され、applicationDidFinishLaunching 中に追加されたオブジェクトがそれに続きます。

なぜこれが起こるのですか?最初に要素を追加せずにテーブルにデータを入力する方法はありますか?

4

3 に答える 3

0

NSArrayController は変更可能な配列への変更を追跡せず、array監視しているプロパティへの変更のみを追跡します。したがって、代わりにやりたいことは次のとおりです。

NSMutableArray  *mutableArray = [[NSMutableArray alloc] init];

SomeObject* foo = [[Object alloc] init];
foo.text = @"sup";
[mutableArray addObject:foo]; //Repeat this a few times

array=mutableArray;

アレイ コントローラはarray、実装されたアレイに変更されていることを確認できます。

于 2013-11-03T21:29:01.460 に答える
0

テーブルの列を配列コントローラーに既にバインドしていることを願っています。したがって、辞書を取得し、その値をテーブル列のキーに設定し、その辞書を可変配列に追加して、可変配列を設定するだけです。また、windowDidLoad または awakeFromNib メソッドにこのコードを含めます。

于 2013-11-05T03:52:19.393 に答える
0

結局のところ、次のものが必要です。

  1. 配列コントローラーをプロパティとしてアプリデリゲートにリンクしました
  2. オブジェクトをアレイコントローラー自体に追加しました

これは私のアプリのdelegate.hにありました:

@property (copy) NSMutableArray *pastes;
@property (assign) IBOutlet NSArrayController *controller;

そして私のアプリのdelegate.m:

@synthesize pastes, controller;

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    pastes = [[NSMutableArray alloc] init];

    [controller addText:@"sup"];
    [controller addText:@"hey"];
    [controller addText:@"hi"];
}
于 2013-11-04T23:41:41.717 に答える