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