Frage

Ich arbeite Objective-C / Coaoa auf das Lernen, aber ich habe scheinen ein wenig zu haben, mit dem Erhalten der NSTableView Objekt stecken geblieben für mich zu arbeiten. Ich habe alle Richtungen gefolgt, aber aus irgendeinem Grund, den ich immer noch diesen Fehler:

Class 'RobotManager' does not implement the 'NSTableViewDataSource' protocol

Hier ist meine Quelle, sagen Sie mir, was Sie hier sehen, ist falsch, ich bin über mein Gesicht abreißen.

RobotManager.h

@interface RobotManager : NSObject {
 // Interface vars
 IBOutlet NSWindow *MainWindow;
 IBOutlet NSTableView *RobotTable;
 NSMutableArray *RobotList;
}

- (int) numberOfRowsInTableView: (NSTableView*) tableView;
- (id) tableView:(NSTableView *) tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)rowIndex;
@end

RobotManager.m

#import "RobotManager.h"

@implementation RobotManager

-(void) awakeFromNib {
 // Generate some dummy vals
 [RobotList addObject:@"Hello"];
 [RobotList addObject:@"World"];
 [RobotTable setDataSource:self]; // This is where I'm getting the protocol warning
 [RobotTable reloadData];
}

-(int) numberOfRowsInTableView: (NSTableView *) tableView {
 return [RobotList count];
}

-(id) tableView:(NSTableView *) tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)rowIndex {
 return [RobotList objectAtIndex:rowIndex];
}

@end

Ich bin mit OS X 10.6.1, ob das einen Unterschied macht. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Versuchen Sie, die Erklärung des @interface auf die folgende Veränderung:

@interface RobotManager : NSObject <NSTableViewDataSource> {

Damit wird den Compiler sagen, dass die RobotManager Klasse des NSTableViewDataSource Protokoll folgt.

Edit:

Darüber hinaus ist es wahrscheinlich wahrscheinlich, dass der RobotList nicht initialisiert wird, bevor die beiden Methoden des NSTableViewDataSource genannt werden. In anderen Worten, wird awakeFromNib nicht genannt zu werden.

Es sei denn, es einen expliziten Aufruf der awakeFromNib von einem Anrufer, wird der RobotList nicht initialisiert werden, so anstatt die RobotList in diesem Verfahren bevölkern, versuchen Sie es bevölkern, wenn die RobotManager zuerst instanziiert.

Andere Tipps

Zum einen beschäftigen sich die Datenquelle Methoden jetzt mit NSIntegers, nicht ints.

Weitere einschlägig, wenn Ihre Bereitstellung Ziel Mac OS X 10.6 oder höher ist, dann müssen Sie Ihre Datenquelle Klasse als konform die NSTableViewDataSource formal Protokoll in @interface Ihre Klasse. (Dieses Protokoll und viele andere sind neu in 10.6; vorher waren sie informelle Protokolle.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top