Objective c NSTableView数据源不工作

Objective c NSTableView数据源不工作,objective-c,macos,sockets,Objective C,Macos,Sockets,我正在尝试使用NSArray填充NSTableView。我有一个视图控制器,我已将其设置为数据源,但每次运行程序时,都会出现以下错误:必须实现numberOfRowsInTableView:和tableView:objectValueForTableColumn:row:,这两个错误我都已实现。 这是我的标题: #import <Cocoa/Cocoa.h> @interface ChatViewController : NSViewController <NSTableVi

我正在尝试使用NSArray填充NSTableView。我有一个视图控制器,我已将其设置为数据源,但每次运行程序时,都会出现以下错误:
必须实现numberOfRowsInTableView:和tableView:objectValueForTableColumn:row:
,这两个错误我都已实现。 这是我的标题:

#import <Cocoa/Cocoa.h>

@interface ChatViewController : NSViewController <NSTableViewDataSource>

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView;
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex;

@end
Socket
是我创建的一个类,用于打开和关闭服务器的套接字,该类功能齐全。
tableData
数组像普通数组一样填充


感谢您的帮助。

首先,通过xib使您的表视图成为文件所有者的委托和数据源

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
    if(aTableView == tableViewS)
    {
        if([[aTableColumn identifier] isEqualToString:@"first"])
        {
            return [self.tableData objectAtIndex:rowIndex];
        }
    }
    return nil;
}
您需要为表列指定标识符名称


tableViewS是表视图的IBOutlet。

首先通过xib使您的表视图成为文件所有者的委托和数据源

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
    if(aTableView == tableViewS)
    {
        if([[aTableColumn identifier] isEqualToString:@"first"])
        {
            return [self.tableData objectAtIndex:rowIndex];
        }
    }
    return nil;
}
您需要为表列指定标识符名称


tableViewS是table view的一个出口。

首先,您不需要在.h文件中声明方法,因为它们是类所实现的协议的一部分。你真的设置了你的数据源吗?你在哪里做过这样的事吗

self.tableView.dataSource = self;

首先,不需要在.h文件中声明方法,因为它们是类实现的协议的一部分。你真的设置了你的数据源吗?你在哪里做过这样的事吗

self.tableView.dataSource = self;

如何在xib中设置标识符?感谢您在xib中的回答,选择表列,转到Identification inspector,在那里设置标识符名称。谢谢,我现在看到了如何在xib中设置标识符?感谢您在xib中的回答,选择表格列,转到识别检查员,在那里设置标识符名称。谢谢,我看到nowOmg我没有这样做,但是当我添加它时,它不会改变错误,并且tableview仍然没有填充。我唯一能想到的是,在.h文件的接口声明中重新声明两个协议方法。您不应该这样做,因为它已经是您的类确认的协议的一部分。虽然我不认为这会阻止tableview在类中查找方法,因为它们存在。OMG你是对的,我在xib和代码中连接了数据源,但它不起作用,所以我只是通过xib设置委托和数据源,它起作用了。@PR_Singh在开始回答时也这么说,但直到现在我才明白。天哪,我没有这么做,但当我添加它时,它不会改变错误,tableview仍然无法填充。我唯一能想到的是,你在你的.h文件的接口声明中重新声明了这两个协议方法。您不应该这样做,因为它已经是您的类确认的协议的一部分。虽然我不认为这会阻止tableview在类中查找方法,因为它们存在。OMG你是对的,我在xib和代码中连接了数据源,但它不起作用,所以我只是通过xib设置委托和数据源,它起作用了。另外@PR_Singh在回答的开始时说了这句话,但直到现在我才明白。