NSTableView非法数据源



我正在读Tim Isted的《开始Mac编程》一书,我被一个处理NSTableView的程序卡住了。我有一个从NSDocument继承的Cocoa应用程序。该应用程序包含NSTableView。我已将"表视图"的数据源设置为"文件"的所有者。执行时,我得到*非法的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];
}

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

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

-(NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView

最新更新