Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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_Macos_Cocoa_Nstableview - Fatal编程技术网

Objective c 如何填充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

我目前正在通过控制器(MVC设计模式)填充NSTableView,在控制器的
init
方法中初始化NSMutableArray的一个条目

我将如何:

  • 填充我的NSMutableArray,它是一个Person对象数组
  • 我应该在基类的
    mainViewDidLoad
    方法中填充NSMutableArray吗?我没有找到这方面的任何例子或资源
  • 模型(Person.m)

    控制器(PersonController.m)

    基本文件(Main.h):

    #import "Main.h"
    
    @implementation Main
    
    - (void)mainViewDidLoad
    {
    
    }
    
    @end
    

    顺便说一下,PersonController中注释掉的代码看起来是正确的。我假设NSTableRow具有正确的标识符。唯一的问题是person对象为空,因此没有要显示的字符串。我打赌发生的情况是,您的行试图在第一行中显示nil,而显示的是空字符串。创建person对象、设置name和gender字段,然后将其放入NSMutableArray并调用reloadData是否有效(基本上,注释代码的作用是什么,除非现在您提供了一些要显示的实际数据)

    我将如何:

    • 填充我的NSMutableArray,它是一个Person对象数组
    步骤1:创建Person对象

    步骤2:

    注释掉的代码正是这样做的,尽管您可能应该单独创建人员,以防您想要配置它(例如,设置其名称)

    我应该在基类的
    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