Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTableView没有';在通过控制器添加新对象之前,不要填充数组对象_Objective C_Arrays_Cocoa_Nstableview_Cocoa Bindings - Fatal编程技术网

Objective c NSTableView没有';在通过控制器添加新对象之前,不要填充数组对象

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

我使用cocoa绑定设置了一个NSTableView和一个数组控制器,如下所示:

在ApplicationIDFinishLaunching期间的我的应用程序委托中,我在这里有以下代码片段,初始化数组并用对象填充它

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;

阵列控制器将看到
阵列
被更改为已填充的阵列。

事实证明,我应该:

  • 将阵列控制器作为属性链接到我的应用程序代理
  • 将对象添加到阵列控制器本身
  • 这是在我的应用程序代理中。h:

    @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谢谢,尽管有趣的是,这个问题似乎也是你的重复,但当每个人都认为他们有不同的问题时,这并不总是容易的;)