0

我有一个 NSTableView 和一个数组控制器设置如下所示,使用可可绑定:https ://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TableView/PopulatingViewTablesWithBindings/PopulatingView-TablesWithBindings.html#// 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: input 并在运行时单击它(这会将一个新对象添加到数组和表中),那么该表将首先显示新对象,然后是在 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

事实证明,我应该:

  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 回答
0

我希望您已经将表格列绑定到数组控制器。因此,您只需获取字典,然后将该值设置为表列的键,然后将该字典添加到可变数组,然后设置您的可变数组。并且还将此代码包含在您的 windowDidLoad 或 awakeFromNib 方法中。

于 2013-11-05T03:52:19.393 回答