2009-12-04 68 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是你在你的表格有部分數量