3

我创建了一个子类NSTableCellView来做一些自定义绘图。表格的内容是通过绑定到 NSArrayController 获得的,因此,当新数据添加到 NSArrayController 时,我的 NSTableCellView 子类的新实例是“自动”创建的。我需要一些代码在创建新实例时运行一次,所以我认为它应该进入init. 我实现了 init 和 initWithFrame (见下文),但是在创建子类的新实例时似乎都没有调用它们(即我在控制台中看不到我的 NSLog 消息)。我应该使用不同的初始化方法吗?

- (id)init {
    self = [super init];
    if (self) {
        // Initialization code here.
        NSLog(@"init");
    }
    return self;
}

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
        NSLog(@"init with frame");
    }
    return self;
}
4

1 回答 1

9

为了回答您的问题,指定的初始化程序是 initWithFrame:。但是,如果视图在 NIB 中编码(如本例所示),则会调用 initWithCoder:。您必须覆盖该方法。

不要使用 awakeFromNib;一般来说,它可能会比你预期的更频繁地被调用,而且我已经看到它会给人们带来麻烦。

但是,在表格视图委托方法 viewForTableColumn:row: 中进行单元格初始化的一个好地方: - 您仍然可以使用它并使用绑定。

corbin(我写了有问题的课程)。

于 2013-01-24T17:56:28.597 回答