2012-10-26 64 views
1

我想通過Apple文檔中的示例代碼設置一列非常基本的NSTableView。我正在以編程方式設置它,因爲可可綁定目前對我來說仍然有點像黑暗藝術,但是當我構建&運行時,我的應用程序中沒有任何數據。我的代碼中是否存在缺失? (我也迷上了通過Interface Builder中我的數據源和委託,因此它不能是無論是。)NSTableView沒有填充任何數據

接口文件

#import <Cocoa/Cocoa.h> 

@interface RLTAppDelegate : NSObject <NSApplicationDelegate, NSTableViewDataSource, NSTableViewDelegate> 

@property (assign) IBOutlet NSWindow *window; 
@property (weak) IBOutlet NSScrollView *tableView; 

@property (copy) NSArray *nameArray; 

@end 

實現文件

#import "RLTAppDelegate.h" 

@implementation RLTAppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    _nameArray = [[NSArray alloc] initWithObjects:@"Ryan", @"Steven", @"Scott", nil]; 
} 

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 

     return _nameArray.count; 
} 

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 

    NSTextField *result = [tableView makeViewWithIdentifier:@"withoutIcon" owner:self]; 

    result.stringValue = [self.nameArray objectAtIndex:row]; 

    return result; 
} 

@end 

回答

0

我想你錯過了

@property (weak) IBOutlet NStableView *tableview; 
+0

這似乎是合乎邏輯的,但它並沒有造成很大的差異!我完全困惑,我必須誠實。 – Ryan

+0

只是檢查tableview委託函數調用與否。 – Senthilkumar

+0

我該怎麼做? – Ryan

0

從xib/storyboard連接你的Outlet of tableview並且不要忘記設置delagate和數據源。

@property (weak) IBOutlet NSTableView *tableView;

在界面生成器,在屬性檢查員窗格(Cmd的-OPT-4),設置表視圖類型來查看基於。它是基於單元格的默認設置。

您必須在左側對象視圖中或通過在編輯器中單擊它來選擇表視圖。注意,當你第一次在編輯器中點擊它時,它會選擇滾動視圖,所以你必須再次點擊它才能選擇表格視圖對象。

我相信你需要Xcode 4.3或更高版本的OS X 10.7 SDK,因此基於視圖的表格視圖纔可用。

+0

是的,我補充說,我已經設置我的應用程序委託作爲委託和數據源。想不到還有什麼我錯過了! – Ryan

+1

看到編輯答案 –

+0

我改變它查看(很好的提示),並點擊兩次到表視圖對象。儘管如此,當我在B&R時,我什麼也得不到。 – Ryan

0

我試過同樣的事情,結果NSTextField結果沒有被實例化。我結束了使用

NSTextField *result = [[NSTextField alloc]init]; 
result.string = [_nameArray objectAtIndex:row]; 

,這工作得很好。