2009-12-04 47 views
0

我看到有很多关于此的问题,但没有任何帮助我得到这项工作。 我有一个带有三列的NSTableView(带有正确的标识符集)和一个名为ShortcutsTableController的类。在笔尖我有一个NSObject与类值ShortcutsTableController。我也像往常一样将NSTableView连接到我的控制器。无法获得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。

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

-Albé

UPDATE。在头文件中增加了行@property (assign) IBOutlet NSTableView *shortcutsTable;,在执行中增加了@synthesize shortcutsTable;。没有什么变化。 :(

+0

这是什么'的NSLog(@ “%@”,shortcutsTable);'产生'setUpTable '? – 2009-12-04 15:33:47

+0

(null)。 :O无法理解这个:( – Donovan 2009-12-04 17:11:44

回答

0

根据您NSLog声明中setUpTable:的结果?,你没有你的IBOutlet中成立。也许你没有,但它在某种程度上迷路了(撤消,覆盖意外删除它等),你需要回去Interface Builder并重新建立xib中的ShortcutsTableControllerNSTableView之间的连接。

+0

非常奇怪,我回到Interface Builder并尝试重新建立连接(已经存在),我也尝试删除TableView并重新添加它,但它总是(空)。IB说控制器和NSTableView已连接,但实际上它们不是。:( – Donovan 2009-12-05 10:16:03

+0

好吧...现在连接已激活e(我不知道为什么:O)。该值不是(null),但表中没有任何内容。如果我在初始化期间添加元素并重新加载,但是如果在init之后将项添加到数组中,则没有任何更改。 – Donovan 2009-12-05 10:53:41

0

在shortcutsList多少对象?

尝试通过字典其他地方,但数据源的方式进行迭代,看看它的正确显示数据。

而且,你该控制器设置为数据源在IB或手动在awakeFromNib该表

+0

手动在'setUpTable':'[shortcutsTable setDataSource:self];',但我连接也在笔尖(CTRL从NSTableView拖动到控制器,比我选择的dataSource) – Donovan 2009-12-04 12:38:05

+0

我试过也为NSView()添加到tableView方法,但在控制台中什么也没有出现,似乎从来没有使用过,即使我调用reloadData。 – Donovan 2009-12-04 14:20:37

+0

控制器是表的代表吗? – ruipacheco 2009-12-05 13:07:09

0

当你更新shortcutList时,你正在调用[table reloadData]吗?

+0

是的,我打电话给它。 :-) – Donovan 2009-12-05 17:02:22

0

尝试增加

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

到你的代码,其中1是你在你的表格有部分数量