Objective c 如何填充NSTableView?
我目前正在通过控制器(MVC设计模式)填充NSTableView,在控制器的Objective c 如何填充NSTableView?,objective-c,macos,cocoa,nstableview,Objective C,Macos,Cocoa,Nstableview,我目前正在通过控制器(MVC设计模式)填充NSTableView,在控制器的init方法中初始化NSMutableArray的一个条目 我将如何: 填充我的NSMutableArray,它是一个Person对象数组 我应该在基类的mainViewDidLoad方法中填充NSMutableArray吗?我没有找到这方面的任何例子或资源 模型(Person.m) 控制器(PersonController.m) 基本文件(Main.h): #import "Main.h" @implementati
init
方法中初始化NSMutableArray的一个条目
我将如何:
mainViewDidLoad
方法中填充NSMutableArray吗?我没有找到这方面的任何例子或资源#import "Main.h"
@implementation Main
- (void)mainViewDidLoad
{
}
@end
顺便说一下,PersonController中注释掉的代码看起来是正确的。我假设NSTableRow具有正确的标识符。唯一的问题是person对象为空,因此没有要显示的字符串。我打赌发生的情况是,您的行试图在第一行中显示nil,而显示的是空字符串。创建person对象、设置name和gender字段,然后将其放入NSMutableArray并调用reloadData是否有效(基本上,注释代码的作用是什么,除非现在您提供了一些要显示的实际数据) 我将如何:
- 填充我的NSMutableArray,它是一个Person对象数组
mainViewDidLoad
方法中填充NSMutableArray吗
实际上,在用户看到您的模型之前多远您就创建了它并不重要,但在概念上,我觉得它有点异味。它与视图没有任何关系,所以我说它属于init
当然,如果主视图和其中的每个视图都已加载,则需要让它显示对数组所做的任何更改。相反,如果在加载视图之前创建模型,则不需要首先重新加载,因为表视图已经向您请求过一次模型。好吧,我假设您的控制器有一个IBOutlet NSTableView*personTable属性,它绑定在接口生成器中 此外,在控制器的接口中,应该声明协议,但同样,由于控制器的实现具有适当的方法,我假设您也正确地设置了该协议 另一个细节是,是否在interface builder中正确设置了表列的标识符?从这个例子中,我不清楚列标识符与个人属性(姓名和性别)的关系。array personList是否应该保存dictionary对象,其中dictionary的对象是person,并且dictionary的键映射到您在interface builder中设置的列标识符
另一个技术问题是,房产名称(PersonList)不应以大写字母开头。我认为这只是一个输入错误,当您尝试使用小写字母p获取personList时,编译器至少应该提出抗议。对不起,我应该包含我的初始化器代码。为了清楚起见,请参阅更新,因为我将Person.h替换为Person.m
#import "PersonController.h"
#import "Person.h"
@implementation PersonController
- (id)init
{
self = [super init];
if (self) {
PersonList = [[NSMutableArray alloc] init];
// [personList addObject:[[Person alloc] init]];
//
// [personTable reloadData];
}
return self;
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [personList count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
Person *person = [personList objectAtIndex:row];
NSString *identifier = [tableColumn identifier];
return [person valueForKey:identifier];
}
- (void)dealloc
{
[super dealloc];
}
@end
#import "Main.h"
@implementation Main
- (void)mainViewDidLoad
{
}
@end