Objective c 通过单击按钮,使用新对象填充NSTableView

Objective c 通过单击按钮,使用新对象填充NSTableView,objective-c,cocoa,nstableview,Objective C,Cocoa,Nstableview,我正试图通过单击按钮用自定义对象填充NSTableView。我的自定义类只有NSString属性:title和volume。我定制了init方法来创建一个对象,并将其添加到连接到表视图的数组中。然后在按钮的方法上,我让它创建另一个对象并将其添加到数组中。当我运行程序时,init方法中的对象确实正确显示。然而,当我点击我的按钮时,我什么也得不到 以下是我的头文件的代码: #import <Cocoa/Cocoa.h> @interface AppDelegate : NSObject

我正试图通过单击按钮用自定义对象填充NSTableView。我的自定义类只有NSString属性:
title
volume
。我定制了init方法来创建一个对象,并将其添加到连接到表视图的数组中。然后在按钮的方法上,我让它创建另一个对象并将其添加到数组中。当我运行程序时,init方法中的对象确实正确显示。然而,当我点击我的按钮时,我什么也得不到

以下是我的头文件的代码:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate, NSTableViewDataSource>{
    NSMutableArray *_myArray;}

@property (weak) IBOutlet NSTableView *tableView;

- (IBAction)button:(id)sender;

@end
我不确定我在这里做错了什么,因为我在init方法中做的和在button方法中做的差不多。非常感谢您的帮助。下面是我运行程序后的图片:

正如您所看到的,我的第一个对象出现在表视图中,而不是第二个

在查看这个项目时,我复制了
[\u tableView reloadData]行,并在第二个断点上放置了一个断点,这样我就可以看到在调用第一个断点之后发生了什么。我注意到的一件事是,
\u myArray
现在在单击按钮后包含2个对象

但是,当我查看
\u tableView
时,它显示
\u myArray
仅包含一个对象。为什么实际添加了对象,但表视图只得到1


这里有一张图片供参考:

试着调试你的代码,我猜你的表视图出口设置不正确。我用我在查看代码和设置断点时发现的一些东西编辑了原始问题。Krzysztof是对的_调试图片中_数据源(AppDelegate)的tableView为零。
#import "AppDelegate.h"
#import "trade.h"

@interface AppDelegate ()

@property (weak) IBOutlet NSWindow *window;
@end

@implementation AppDelegate


-(id)init{
    self = [super init];
    if (self){
        _myArray = [[NSMutableArray alloc]init];
        trade *firstTrade = [[trade alloc]init];
        [firstTrade setTitle:@"Trade One"];
        [firstTrade setVolume:@"Volume 01"];
        [_myArray addObject:firstTrade];}
    return self;}

- (IBAction)button:(id)sender {
    trade *secondTrade = [[trade alloc]init];
    [secondTrade setTitle:@"Trade two"];
    [secondTrade setVolume:@"Volume 02"];
    [_myArray addObject:secondTrade];
    [_tableView reloadData];}

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{
    return _myArray.count;}

-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    if ([tableColumn.identifier isEqualToString:@"Title"]){
        trade *item = [_myArray objectAtIndex:row];
        return item.title;
    }else{
        trade *item = [_myArray objectAtIndex:row];
        return item.volume;}}

@end