NSTableView非法数据源

时间:2012-02-27 22:15:56

标签: objective-c macos cocoa

我正在阅读蒂姆·伊斯特德(Tim Isted)的“初学Mac编程”(Beginning Mac Programming)这本书,我遇到了一个处理NSTableView的程序。 我有一个从NSDocument继承的Cocoa应用程序。该应用程序包含一个NSTableView。我已将Table View的数据源设置为File的所有者。执行后,我得到 * 非法的NSTableView数据源()。必须实现numberOfRowsInTableView:和tableView:objectValueForTableColumn:row:

MyDocument.h的界面是

   #import <Cocoa/Cocoa.h>

@interface MyDocument : NSDocument {
    IBOutlet NSTextField *newItemTextField;
    IBOutlet NSTableView *shoppingListTableView; 
    NSMutableArray *shoppingListArray;
}
-(IBAction)addNewItemToShoppingList:(id)sender;
-(void)dealloc;
-(NSInteger)numberOfRowsInTableView;
-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex;
@end

虽然实施是

#import "MyDocument.h"

@implementation MyDocument

- (id)init
{
    self = [super init];
    if (self) {
        shoppingListArray = [[NSMutableArray alloc] initWithObjects:@"pane",@"latte",@"pasta", nil];

    }

    return self;
}

-(IBAction)addNewItemToShoppingList:(id)sender{
    NSString *item = [newItemTextField stringValue];
    [shoppingListArray addObject:item];
    [shoppingListTableView reloadData];
    NSLog(@"allocated");

}
-(void)dealloc{
    [shoppingListArray release];
    [super dealloc];
}
-(NSInteger)numberOfRowsInTableView{
    return [shoppingListArray count];
}

-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex{
    return [shoppingListArray objectAtIndex:rowIndex];
}

我做错了什么???非常感谢。

1 个答案:

答案 0 :(得分:1)

您已实施numberOfRowsInTableView,但您需要实施numberOfRowsInTableView:。正确的签名是:

-(NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView