1

我正在尝试通过 Apple 文档中的示例代码设置一个非常基本的 NSTableView 和一列。我正在以编程方式设置它,因为目前 Cocoa 绑定对我来说仍然有点像黑暗艺术,但是当我构建和运行时,我的应用程序中没有数据。我的代码中是否缺少某些内容?(我还通过 Interface Builder 连接了我的数据源和委托,所以也不能这样。)

接口文件

#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
4

3 回答 3

0

我尝试了同样的事情,结果发现 NSTextField 结果没有被实例化。我最终使用

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

这很好用。

于 2014-08-14T17:55:07.223 回答
0

我想你错过了

@property (weak) IBOutlet NStableView *tableview; 
于 2012-10-26T12:04:49.803 回答
0

从 xib/storyboard 连接您的 tableview 出口,不要忘记设置 delagate 和数据源。

@property (weak) IBOutlet NSTableView *tableView;

在 Interface Builder 的 Attributes inspector 面板 (Cmd-Opt-4) 中,将 table view type 设置为 View Based。默认情况下它是基于单元格的。

您必须在左侧对象视图中或通过在编辑器中单击它来选择表视图。请注意,第一次在编辑器中单击它时,它将选择滚动视图,因此您必须第二次单击它才能选择表视图对象。

我相信您需要 Xcode 4.3 或更高版本的 OS X 10.7 SDK,因此需要基于视图的表格视图。

于 2012-10-26T12:09:20.983 回答