我试图通过单击按钮使用自定义对象填充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
这是我的实施:
#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
我不知道我在这里做错了什么,因为我在init方法中所做的与使用button方法完全相同。任何帮助是极大的赞赏。以下是我运行程序后的程序图片:
正如您所见,我的第一个对象出现在表格视图中,但不是第二个对象。
在查看这个项目时,我复制了[_tableView reloadData];
行,并在第二行上设置了一个断点,这样我就可以看到第一个调用之后发生了什么。我注意到的一件事是_myArray
现在在点击按钮后包含2个对象。
但是,当我查看_tableView
时,它显示_myArray
只包含1个对象。实际上如何添加对象但表格视图只有1?
以下是参考图片:Debug