سؤال

أنا أعمل على التعلم الهدف-C/Coaoa ولكني يبدو قد حصلت قليلا عالقة مع الحصول على NSTableView كائن إلى العمل بالنسبة لي.لقد اتبعت جميع الاتجاهات, ولكن لسبب ما أنا لا يزال الحصول على هذا الخطأ:

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

هنا هو بلدي المصدر ، قل لي ما تراه هو الخطأ هنا, أنا على وشك أن تمزق وجهي.

RobotManager.ح

@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.م

#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

أنا تشغيل OS X 10.6.1 إذا كان ذلك يجعل من أي اختلاف.شكرا مقدما.

هل كانت مفيدة؟

المحلول

حاول تغيير إعلان @interface إلى ما يلي:

@interface RobotManager : NSObject <NSTableViewDataSource> {

هذا وسوف اقول المترجم أن RobotManager فئة يتبع NSTableViewDataSource البروتوكول.

تحرير:

وبالإضافة إلى ذلك, ربما من المحتمل أن RobotList لم يتم تهيئة قبل طريقتين NSTableViewDataSource هي التي تسمى.بمعنى آخر ، awakeFromNib يتم استدعاء.

ما لم يكن هناك دعوة صريحة إلى awakeFromNib من بعض المتصل ، RobotList لن يكون مهيأ لذلك بدلا من ملء RobotList في هذا الأسلوب ، في محاولة ملء عندما RobotManager هو أول مثيل.

نصائح أخرى

لشيء واحد، وأساليب مصدر البيانات الآن التعامل مع NSIntegers، وليس ints.

وأكثر وثيق الصلة، إذا الهدف النشر الخاصة بك هو ماك OS X 10.6 أو في وقت لاحق، ثم عليك أن يعلن فئة مصدر البيانات الخاص بك كما تتفق مع <لأ href = "http://developer.apple.com/mac/library/documentation / الكاكاو / المرجع / ApplicationKit / بروتوكولات / NSTableDataSource_Protocol / "يختلط =" noreferrer "> وNSTableViewDataSource <م> رسمي بروتوكول في @interface الطبقة الخاص بك. (هذا البروتوكول وغيرها الكثير والجديد في 10.6، في وقت سابق، كانت البروتوكولات الرسمية).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top