首页 > 解决方案 > 非法的 NSTableView 数据源 - 我做错了什么?

问题描述

我有一个应用程序,我在其中添加了带有电影名称的简单图像(海报)。但运行后,我只能看到空表和控制台中的错误:

非法的 NSTableView 数据源()。必须实现 numberOfRowsInTableView: 和 tableView:objectValueForTableColumn:row:

现在,在我的 .xib 文件中,我有 Table ViewdataSourcedelegate链接到File's Owner. 这是代码:

主视图控制器.m

#import "MasterViewController.h"
#import "NSObject+IntengineMovieData.h"
#import "NSObject+IntengineMovieDoc.h"

@interface MasterViewController ()

@end

@implementation MasterViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
}

- (NSView *)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSTableCellView *cellView = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];

    if([tableColumn.identifier isEqualToString:@"MoviesColumn"]) {
        IntengineMovieDoc *movieDoc = [self.movies objectAtIndex:row];
        cellView.imageView.image = movieDoc.thumbImage;
        cellView.textField.stringValue = movieDoc.data.title;
        return cellView;
    }
    return cellView;
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return [self.movies count];
}

@end

这个问题是什么意思,我该如何解决?


编辑 1:我有 MasterViewController.xib 作为我的主界面。我通过这个加载它:

AppDelegate.m

#import "AppDelegate.h"
#import "NSObject+IntengineMovieDoc.h"
#include "MasterViewController.h"

@interface AppDelegate ()
@property (nonatomic, strong) IBOutlet MasterViewController *masterViewController;
@property (assign) IBOutlet NSWindow *window;
@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.masterViewController = [[MasterViewController alloc]
                                 initWithNibName:@"MasterViewController" bundle:nil];

    IntengineMovieDoc *movie1 = [[IntengineMovieDoc alloc] initWithTitle:@"The Godfather" rating:5 thumbImage:[NSImage imageNamed:@"TheGodfatherThumb.jpg"] fullImage:[NSImage imageNamed:@"TheGodfather.jpg"]];

    IntengineMovieDoc *movie2 = [[IntengineMovieDoc alloc] initWithTitle:@"Tree of Life" rating:4 thumbImage:[NSImage imageNamed:@"TreeOfLifeThumb.jpg"] fullImage:[NSImage imageNamed:@"TreeOfLife.jpg"]];

    IntengineMovieDoc *movie3 = [[IntengineMovieDoc alloc] initWithTitle:@"Taxi Driver" rating:5 thumbImage:[NSImage imageNamed:@"TaxiDriverThumb.jpg"] fullImage:[NSImage imageNamed:@"TaxiDriver.jpg"]];

    NSMutableArray *movies = [NSMutableArray arrayWithObjects: movie1, movie2, movie3, nil];
    self.masterViewController.movies = movies;

    [self.window.contentView addSubview:self.masterViewController.view];
    self.masterViewController.view.frame = ((NSView*)self.window.contentView).bounds;
}

- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}
@end

标签: objective-cxcodemacos

解决方案


推荐阅读