无法让NSTableView显示数据

发布于 2024-08-14 07:32:50 字数 1983 浏览 8 评论 0原文

我看到有很多关于此的问题,但没有任何东西可以帮助我完成这项工作。 我有一个带有 NSTableView 的笔尖,其中包含三列(设置了正确的标识符)和一个名为 ShortcutsTableController 的类。在笔尖中,我有一个具有类值 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 中时什么也没有出现。没有错误,没有警告。请注意,我从委托类方法 awakeFromNib 中调用 setUpTable。

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

-阿尔贝

更新。在标头中添加了行 @property (assign) IBOutlet NSTableView *shortcutsTable; ,并在实现中添加了 @synthesize ShortcutsTable; 行。没有任何改变。 :(

I see there are a lot of questions about this, but nothing helped me to get this work.
I have a nib with a NSTableView with three columns (with the right identifiers set) and a class named ShortcutsTableController. In the nib I have a NSObject with class value ShortcutsTableController. I also connected the NSTableView to my controller as I usually do.

This is header 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

And this is the implementation file 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

But when i try to build nothing appears in the NSTableView. No errors, no warnings. Note that I call setUpTable from within the Delegate Class Method awakeFromNib.

Is there something I am doing wrong? Thank you for you help.

—Albé

UPDATE. Added lines @property (assign) IBOutlet NSTableView *shortcutsTable; in header and @synthesize shortcutsTable; in implementation. Nothing changes. :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心作怪 2024-08-21 07:32:50

根据 setUpTable:NSLog 语句的结果,您尚未设置 IBOutlet。也许你这样做了,但它不知何故丢失了(撤消、覆盖、意外删除等)。您需要返回 Interface Builder 并重新建立 xib 中的 ShortcutsTableControllerNSTableView 之间的连接。

Based on the results of your NSLog statement in setUpTable:, you don't have your IBOutlet set up. Perhaps you did, but it somehow got lost (undo, overwrite, accidentally deleted it, etc). You'll need to go back to Interface Builder and re-establish the connection between ShortcutsTableController and the NSTableView in the xib.

九局 2024-08-21 07:32:50

ShortcutsList 中有多少个对象?

尝试在数据源方法之外的其他位置迭代字典,以查看其是否正确显示数据。

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

How many objects in shortcutsList?

Try to iterate through the dictionary anywhere else but the datasource methods to see if its displaying data correctly.

Also, have you set the controller as the datasource of that table in IB or manually in your awakeFromNib?

岁月蹉跎了容颜 2024-08-21 07:32:50

更新快捷方式列表时是否调用[table reloadData]?

Are you calling [table reloadData] when you update shortcutList?

忘东忘西忘不掉你 2024-08-21 07:32:50

尝试添加

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

到您的代码中,其中 1 是表中的节数

Try adding

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

to your code where 1 is the number of sections you have in your table

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文