我使用可可绑定设置了如此处所示的NSTableView和数组控制器:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TableView/PopulatingViewTablesWithBindings/PopulatingView-TablesWithBindings.html#//apple_ref/doc/uid/10000026i-CH13-SW3
在我的app delegate applicationDidFinishLaunching中,我在这里有以下片段,初始化数组并用对象填充
array = [[NSMutableArray alloc] init];
SomeObject* foo = [[Object alloc] init];
foo.text = @"sup";
[array addObject:foo]; //Repeat this a few times
然而,当我构建应用程序并运行它时,我最终得到一个空表。但是,如果我将一个按钮绑定到数组控制器的add:input并在运行时单击它(这会向数组和表中添加一个新对象),那么表将首先显示新对象,并在applicationDidFinishLaunching之后添加对象。
为什么会这样?有没有办法让我的表填充而不必先添加元素?
答案 0 :(得分: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
更改为已填充的数组。
答案 1 :(得分:0)
事实证明,我应该:
这是我的app delegate.h:
@property (copy) NSMutableArray *pastes;
@property (assign) IBOutlet NSArrayController *controller;
和我的app delegate.m:
@synthesize pastes, controller;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
pastes = [[NSMutableArray alloc] init];
[controller addText:@"sup"];
[controller addText:@"hey"];
[controller addText:@"hi"];
}
答案 2 :(得分:0)
我希望您已将表列绑定到数组控制器。因此,您只需要获取字典,然后将该值设置为表列的键,然后将该字典添加到可变数组中,然后设置可变数组。并且还在windowDidLoad或awakeFromNib方法中包含此代码。