我正在阅读蒂姆·伊斯特德(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];
}
我做错了什么???非常感谢。
答案 0 :(得分:1)
您已实施numberOfRowsInTableView
,但您需要实施numberOfRowsInTableView:
。正确的签名是:
-(NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView