1

私は次のObjective 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 に答える