NSTableView المشاكل
-
06-07-2019 - |
سؤال
أنا أعمل على التعلم الهدف-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
هو أول مثيل.
نصائح أخرى
لشيء واحد، وأساليب مصدر البيانات الآن التعامل مع NSInteger
s، وليس int
s.
وأكثر وثيق الصلة، إذا الهدف النشر الخاصة بك هو ماك OS X 10.6 أو في وقت لاحق، ثم عليك أن يعلن فئة مصدر البيانات الخاص بك كما تتفق مع <لأ href = "http://developer.apple.com/mac/library/documentation / الكاكاو / المرجع / ApplicationKit / بروتوكولات / NSTableDataSource_Protocol / "يختلط =" noreferrer "> وNSTableViewDataSource
<م> رسمي م> بروتوكول في @interface
الطبقة الخاص بك. (هذا البروتوكول وغيرها الكثير والجديد في 10.6، في وقت سابق، كانت البروتوكولات الرسمية).