无法让NSTableView显示数据

时间:2009-12-04 11:34:25

标签: objective-c nsdictionary nstableview

我看到有很多关于此的问题,但没有任何帮助我完成这项工作。 我有一个NIST,带有三列(带有正确的标识符集)的NSTableView和一个名为ShortcutsTableController的类。在nib中,我有一个类值为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中没有任何内容。没有错误,没有警告。请注意,我从Delegate类方法awakeFromNib中调用setUpTable。

我做错了吗?谢谢你的帮助。

-Albé

更新。标题中添加了行@property (assign) IBOutlet NSTableView *shortcutsTable;,实现中添加了@synthesize shortcutsTable;。没有什么变化。 :(

4 个答案:

答案 0 :(得分:0)

shortcutsList中有多少个对象?

尝试在除数据源方法之外的其他任何地方遍历字典,以查看它是否正确显示数据。

另外,您是将控制器设置为IB中该表的数据源还是在awakeFromNib中手动设置?

答案 1 :(得分:0)

根据NSLogsetUpTable:声明的结果,您没有设置IBOutlet。也许你做了,但它以某种方式迷路了(撤消,覆盖,意外删除它等)。您需要返回Interface Builder并重新建立xib中ShortcutsTableControllerNSTableView之间的连接。

答案 2 :(得分:0)

更新shortcutList时是否正在调用[table reloadData]?

答案 3 :(得分:0)

尝试添加

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

代码,其中1是表格中的部分数量