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

Mik*_*e T 3 cocoa objective-c

我创建了一个子类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;
}
Run Code Online (Sandbox Code Playgroud)

cor*_*unn 9

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

不要使用awakeFromNib; 一般来说,它可能会比你想象的更频繁地被调用,而且我已经看到它会导致人们遇到麻烦.

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

corbin(我写了这个课程).

  • 哈!你不同意写这篇文章的人.嗯......你有权得到自己的意见.我所说的只是"一般"不应该使用.我发现使用它的人有更多的问题,并且不明白为什么以及什么时候被调用. (2认同)