Objective c NSTableView没有';在通过控制器添加新对象之前,不要填充数组对象
我使用cocoa绑定设置了一个NSTableView和一个数组控制器,如下所示: 在ApplicationIDFinishLaunching期间的我的应用程序委托中,我在这里有以下代码片段,初始化数组并用对象填充它Objective c NSTableView没有';在通过控制器添加新对象之前,不要填充数组对象,objective-c,arrays,cocoa,nstableview,cocoa-bindings,Objective C,Arrays,Cocoa,Nstableview,Cocoa Bindings,我使用cocoa绑定设置了一个NSTableView和一个数组控制器,如下所示: 在ApplicationIDFinishLaunching期间的我的应用程序委托中,我在这里有以下代码片段,初始化数组并用对象填充它 array = [[NSMutableArray alloc] init]; SomeObject* foo = [[Object alloc] init]; foo.text = @"sup"; [array addObject:foo]; //Repeat this a few
array = [[NSMutableArray alloc] init];
SomeObject* foo = [[Object alloc] init];
foo.text = @"sup";
[array addObject:foo]; //Repeat this a few times
然而,当我构建应用程序并运行它时,我最终得到了一个空表。但是,如果我将一个按钮绑定到阵列控制器的add:input,并在运行时单击它(这将向阵列和表中添加一个新对象),则表将首先显示新对象,然后在ApplicationIDFinishLaunching期间添加对象
为什么会发生这种情况?有没有一种方法可以让我的表在不必先添加元素的情况下进行填充?NSArrayController不跟踪对可变数组的更改,只跟踪它所观察到的
数组
属性的更改。因此,您要做的是:
NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
SomeObject* foo = [[Object alloc] init];
foo.text = @"sup";
[mutableArray addObject:foo]; //Repeat this a few times
array=mutableArray;
阵列控制器将看到
阵列
被更改为已填充的阵列。事实证明,我应该:
@property (copy) NSMutableArray *pastes;
@property (assign) IBOutlet NSArrayController *controller;
和我的应用程序代理。m:
@synthesize pastes, controller;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
pastes = [[NSMutableArray alloc] init];
[controller addText:@"sup"];
[controller addText:@"hey"];
[controller addText:@"hi"];
}
我希望您已经将表列绑定到数组控制器。因此,您只需使用dictionary,然后将该值设置为表列的键,然后将该dictionary添加到可变数组中,然后设置可变数组。在windowDidLoad或awakeFromNib方法中也包含此代码。我认为这可能是这个问题的重复:@Lucas谢谢,尽管有趣的是,这个问题似乎也是你的重复,但当每个人都认为他们有不同的问题时,这并不总是容易的;)