我创建了一个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;
}
答案 0 :(得分:9)
要回答您的问题,指定的初始化程序是initWithFrame:。但是,如果视图在NIB中编码(在这种情况下),则调用initWithCoder :.你必须覆盖那个方法。
不要使用awakeFromNib;一般来说,它可能比你预期的更频繁地被召唤,而且我看到它会给人们带来麻烦。
但是,初始化单元格的好地方是在表视图委托方法viewForTableColumn:row: - 您仍然可以使用它并使用绑定。
卡宾 (我写了有问题的课程。)