1

我试图了解 OS X 上基于视图的 NSTableViews。

我的问题是,在加载的视图单元(NSView 子类)中,当我尝试在我的委托中分配值时,子视图没有初始化。

目前显示正确的计数和正确的视图,但我无法访问子视图来分配正确的值。

到目前为止我做了什么:

  • 在 Interface Builder 中使用自定义视图单元创建 xib。
  • 为单元创建自定义类并在 IB 中分配它。

这工作正常,我可以在调试器中看到属性。正确的类和属性是连接到正确字段的 IBOulet。

我可以看到调用:

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

在我的 NSViewController 中:awakeFromNib我这样做:

// Make my view controller the delegate
_applicationTableView.delegate = self;
// set the correct datasource
_applicationTableView.dataSource = [NWDataHolder sharedInstance];
// register the nib with the custom cell
[_applicationTableView registerNib:cellNib forIdentifier:@"ApplicationListViewCell"];

在我的- (NSView *)tableView:viewForTableColumn:row:我做:

NWApplicationListViewCell *cell = [_applicationTableView makeViewWithIdentifier:@"ApplicationListViewCell" owner:self];

返回正确的类和单元格,我可以访问这些属性。问题是,该子视图未初始化,属性为 nil 并且无法设置新值:

Log(@"Application Name Label %@", cell.applicationNameLabel); => nil

我已经看到了一些暗示子视图被延迟初始化的提示,但是我找不到使急切初始化的方法。

有什么建议我做错了吗?

谢谢,奥利弗

4

1 回答 1

1

修复了问题。但我不明白为什么会发生这种情况。

我将 IB 中的字段连接到文件所有者,但没有连接到我的 ApplicationViewCell。将属性连接到两者后,一切正常。

于 2013-02-11T12:33:50.583 回答