【问题标题】:NSArrayController populates NSTableView but doesn't set the cell titleNSArrayController 填充 NSTableView 但不设置单元格标题
【发布时间】:2012-10-23 03:57:53
【问题描述】:

我有一个两列 NSTableView,我想用从 CSV 文件中抓取的条目来填充它。除了没有设置每个表格单元格的标题外,一切正常。

这是为 NSArray 中的每一行调用的函数

- (void)populateTable:(NSString *)fname :(NSString *)lname {
    NSMutableDictionary *value = [[NSMutableDictionary alloc] init];
    [value setObject:[NSString stringWithFormat:@"%@", fname] forKey:@"first_name"];
    [value setObject:[NSString stringWithFormat:@"%@", lname] forKey:@"last_name"];

    [arrayController addObject:value];
    [value release];
    [fname_list reloadData];
    [lname_list reloadData];
}

“姓氏”列的值绑定到阵列控制器arrangedObjects.last_name,并且“first_name”和“last_name”都列为阵列控制器>对象中的键控制器 > 按键 列表

创建了适当数量的表格单元格(CSV 文件中的 3 个条目 = 每列中的 3 行),但未设置每个单元格的标题(“first_name”或“last_name”取决于列);单元格的标题仍然是“表格视图单元格”

编辑:

使用 navinsillu 的更改后,我最终得到以下功能:

- (void)populateTable:(id)sender :(NSString *)fname :(NSString *)lname {
    [arrayController insert:sender];
    [[[self arrayController] selection] setValue:fname forKeyPath:@"first_name"];
    [[[self arrayController] selection] setValue:lname forKeyPath:@"last_name"];

    [fname_list reloadData];
    [lname_list reloadData];
}

在我的标题中我有

@property (retain,nonatomic,readwrite) IBOutlet NSArrayController *arrayController;

但我仍然得到相同的结果:每个表格列中有 3 行/单元格,所有标题为“表格视图单元格”

编辑:

经过一番检查,我注意到Model Key Path 下的Value 绑定表列没有任何条目。当我输入 first_namelast_name 时,它会显示 No completions found,即使键列在数组控制器的 Keys 列表中。不幸的是,我不知道为什么它没有找到密钥。

编辑:

奇怪。我尝试删除和添加表视图和数组控制器,但没有奏效。但是,创建一个新项目并执行完全相同的操作会产生预期的结果。

【问题讨论】:

  • 显示您创建单元格的代码。
  • 就是上面的代码。绑定到 NSTableView 列的数组控制器被告知添加一个带有标识符键的对象。它做得很好,但我没有得到一个带有“Smith”、“Johnson”和“Stevenson”等结果的姓氏列,而是得到了“表格视图单元格”、“表格视图单元格”和“表格视图单元格”。
  • 这段代码只会设置数组,我要这个方法代码——(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  • 我对此无能为力。数组控制器将数据添加到 populateTable 中,表格视图会重新加载来自数组控制器的数据
  • 这是基于视图还是基于单元格的表格?

标签: objective-c cocoa nstableview nstablecolumn nstablecellview


【解决方案1】:

您可以在Interface Builder中的表格标题处设置标题。您可以双击表格列标题并为其设置标题。

【讨论】:

  • 哦不,我有那套和所有东西。我正在做的是在应用程序启动时加载一个 CSV 文件,并且对于 CSV 文件中的每一行,它将在表格列中创建一个单元格。它应该将单元格的标题(默认为“表格视图单元格”)设置为 CSV 文件中的相应数据,但事实并非如此。当我对对象 value 执行 NSLog 时,它显示了正确的数据,但每个表格单元格的标题都没有改变。我还不能在这里使用图片,但这就是我的意思:i.imgur.com/4VFrq.png
  • 好的,你可以使用@property (retain,nonatomic,readwrite) IBOutlet NSArrayController *arraycontroller; 然后[[[self arraycontroller] selection] setValue:fname forKeyPath:@"frist_name"]; [[[self arraycontroller] selection] setValue:lnameforKeyPath:@"last_name"];
  • 我刚刚尝试应用您的更改,但仍然得到相同的结果
【解决方案2】:

以与我之前完全相同的方式重新创建项目会产生我所期望的结果。我不知道为什么重做这一切会奏效,但确实奏效了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2019-10-19
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多