1

我有以下目标 C 代码,它一直在抱怨我没有重新定义它!我正在尝试实现 NSTableViewDelegate 的东西,但 xcode 一直在抱怨

#import "AppDelegate.h"

#import <AppKit/AppKit.h>

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // add Hello World to sidebar
    [self.Sidebar.tableView insertValue:0 atIndex:0 inPropertyWithKey:@"Hello World!"];

    [self.Sidebar.tableView setDelegate: SidebarDelegate()]

    // reload data
    [self.Sidebar.tableView reloadData];


}

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication {
    return YES;
}

@end

// Sidebar Delage

@implementation SidebarDelegate : NSObject <NSTableViewDelegate, NSTableViewDataSource>;

// setting data
- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
    anObject = @"Apples";
}

// height
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
    return 20;
}

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex
{
    NSLog(@"%ld", (long)rowIndex);
    return ((long)rowIndex % 2) == 0;
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
    return 4;
}

@end
4

2 回答 2

1

这一行:

[self.Sidebar.tableView setDelegate: SidebarDelegate()];

隐式创建一个名为SidebarDelegate()形式的函数

int SidebarDelegate(void)

因此,当您尝试定义同名的类时,您会以不可接受的方式覆盖符号。您需要初始化一个实例SidebarDelegate并将其作为 TableView 的委托传递,我假设,只需传递类的名称。

于 2013-10-07T04:01:43.300 回答
1

代替

[self.Sidebar.tableView setDelegate: SidebarDelegate()];

SidebarDelegate *sidebarDelegate = [[SidebarDelegate alloc] init];
[self.Sidebar.tableView setDelegate:sidebarDelegate];
于 2013-10-07T04:07:48.693 回答