NSTableView に NSArray を設定しようとしています。データソースとして設定したView Controllerがありますが、プログラムを実行するたびに、このエラーが発生します: Must implement numberOfRowsInTableView: and 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
そして、ここに私の実装ファイルがあります:
#import "ChatViewController.h"
#import "Socket.h"
@interface ChatViewController ()
@property (strong) IBOutlet NSTableView *people;
@property (strong) IBOutlet NSTextField *message;
@property (strong) IBOutlet NSButton *send;
@property (strong) Socket *sock;
@property (strong, nonatomic) NSString *recievedText;
@property (strong, nonatomic) NSArray *tableData;
- (void)updateUI;
@end
@implementation ChatViewController
@synthesize sock;
@synthesize recievedText;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self.people setDataSource:self];
sock = [[Socket alloc] init];
[sock connectToServerWithIP:@"127.0.0.1" andPort:5001];
[self updateUI];
}
return self;
}
- (void)updateUI
{
[sock sendMessage:@"getPeople"];
recievedText = [NSString stringWithString:[sock recieveMessage]];
self.tableData = [recievedText componentsSeparatedByString:@";"];
NSLog(@"%@", self.tableData);
[self.people reloadData];
NSLog(@"%@", self.people);
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [self.tableData count];
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
return [self.tableData objectAtIndex:rowIndex];
}
@end
Socket
サーバーへのソケットを開閉するために作成したクラスで、完全に機能します。tableData
配列は、通常の配列のように設定されます。
助けてくれてありがとう。