我创建了一个子类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)
要回答您的问题,指定的初始化程序是initWithFrame:.但是,如果视图在NIB中编码(在这种情况下),则调用initWithCoder :. 你必须覆盖该方法.
不要使用awakeFromNib; 一般来说,它可能会比你想象的更频繁地被调用,而且我已经看到它会导致人们遇到麻烦.
但是,初始化单元格的好地方是在表视图委托方法viewForTableColumn:row: - 您仍然可以使用它并使用绑定.
corbin(我写了这个课程).
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |