无法让NSTableView显示数据
我看到有很多关于此的问题,但没有任何东西可以帮助我完成这项工作。 我有一个带有 NSTableView 的笔尖,其中包含三列(设置了正确的标识符)和一个名为 ShortcutsTableController 的类。在笔尖中,我有一个具有类值 ShortcutsTableController 的 NSObject。我还像往常一样将 NSTableView 连接到我的控制器。
这是头文件 ShortcutsTableController.h
。
#import <Cocoa/Cocoa.h>
@interface ShortcutsTableController : NSObject <NSTableViewDataSource> {
IBOutlet NSTableView *shortcutsTable;
NSMutableArray *shortcutsList;
}
- (int) numberOfRowsInTableView: (NSTableView*) tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row;
@property (assign) IBOutlet NSTableView *shortcutsTable;
- (void)setUpTable;
@end
这是实现文件ShortcutsTableController.m
。
#import "ShortcutsTableController.h"
@implementation ShortcutsTableController
@synthesize shortcutsTable;
- (void)setUpTable {
shortcutsList = [[NSMutableArray alloc] init];
NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:
@"blabla", @"nameColumn",
@"Bla bla bla", @"shortcutColumn",
@"Ribla", @"actionColumn", nil];
[shortcutsList addObject:dict1];
[shortcutsTable setDataSource:self];
[shortcutsTable reloadData];
}
-(int) numberOfRowsInTableView: (NSTableView *) tableView {
return [shortcutsList count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {
if (row != -1)
return [[shortcutsList objectAtIndex:row] objectForKey:[tableColumn identifier]];
return nil;
}
@end
但是当我尝试构建 NSTableView 中时什么也没有出现。没有错误,没有警告。请注意,我从委托类方法 awakeFromNib
中调用 setUpTable。
我做错了什么吗?谢谢你的帮助。
-阿尔贝
更新。在标头中添加了行 @property (assign) IBOutlet NSTableView *shortcutsTable;
,并在实现中添加了 @synthesize ShortcutsTable;
行。没有任何改变。 :(
I see there are a lot of questions about this, but nothing helped me to get this work.
I have a nib with a NSTableView with three columns (with the right identifiers set) and a class named ShortcutsTableController. In the nib I have a NSObject with class value ShortcutsTableController. I also connected the NSTableView to my controller as I usually do.
This is header ShortcutsTableController.h
.
#import <Cocoa/Cocoa.h>
@interface ShortcutsTableController : NSObject <NSTableViewDataSource> {
IBOutlet NSTableView *shortcutsTable;
NSMutableArray *shortcutsList;
}
- (int) numberOfRowsInTableView: (NSTableView*) tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row;
@property (assign) IBOutlet NSTableView *shortcutsTable;
- (void)setUpTable;
@end
And this is the implementation file ShortcutsTableController.m
.
#import "ShortcutsTableController.h"
@implementation ShortcutsTableController
@synthesize shortcutsTable;
- (void)setUpTable {
shortcutsList = [[NSMutableArray alloc] init];
NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:
@"blabla", @"nameColumn",
@"Bla bla bla", @"shortcutColumn",
@"Ribla", @"actionColumn", nil];
[shortcutsList addObject:dict1];
[shortcutsTable setDataSource:self];
[shortcutsTable reloadData];
}
-(int) numberOfRowsInTableView: (NSTableView *) tableView {
return [shortcutsList count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {
if (row != -1)
return [[shortcutsList objectAtIndex:row] objectForKey:[tableColumn identifier]];
return nil;
}
@end
But when i try to build nothing appears in the NSTableView. No errors, no warnings. Note that I call setUpTable from within the Delegate Class Method awakeFromNib
.
Is there something I am doing wrong? Thank you for you help.
—Albé
UPDATE. Added lines @property (assign) IBOutlet NSTableView *shortcutsTable;
in header and @synthesize shortcutsTable;
in implementation. Nothing changes. :(
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
根据
setUpTable:
中NSLog
语句的结果,您尚未设置 IBOutlet。也许你这样做了,但它不知何故丢失了(撤消、覆盖、意外删除等)。您需要返回 Interface Builder 并重新建立 xib 中的ShortcutsTableController
和NSTableView
之间的连接。Based on the results of your
NSLog
statement insetUpTable:
, you don't have your IBOutlet set up. Perhaps you did, but it somehow got lost (undo, overwrite, accidentally deleted it, etc). You'll need to go back to Interface Builder and re-establish the connection betweenShortcutsTableController
and theNSTableView
in the xib.ShortcutsList 中有多少个对象?
尝试在数据源方法之外的其他位置迭代字典,以查看其是否正确显示数据。
另外,您是否将控制器设置为 IB 中该表的数据源或在 awakeFromNib 中手动设置?
How many objects in shortcutsList?
Try to iterate through the dictionary anywhere else but the datasource methods to see if its displaying data correctly.
Also, have you set the controller as the datasource of that table in IB or manually in your awakeFromNib?
更新快捷方式列表时是否调用[table reloadData]?
Are you calling [table reloadData] when you update shortcutList?
尝试添加
到您的代码中,其中 1 是表中的节数
Try adding
to your code where 1 is the number of sections you have in your table