NSTableCellView子类的指定初始值设定项是什么?

时间:2013-01-23 12:19:31

标签: objective-c cocoa

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

- (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;
}

1 个答案:

答案 0 :(得分:9)

要回答您的问题,指定的初始化程序是initWithFrame:。但是,如果视图在NIB中编码(在这种情况下),则调用initWithCoder :.你必须覆盖那个方法。

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

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

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