gpt4 book ai didi

cocoa - initWithFrame 未调用,但 awakeFromNib 已调用

转载 作者:行者123 更新时间:2023-12-03 16:01:02 25 4
gpt4 key购买 nike

我正在尝试子类化 NSOutlineView。这是我的代码:

OutlineViewSublcas.h:

#import <Cocoa/Cocoa.h>

@interface OutlineViewSubclass : NSOutlineView {

}

@end

OutlineViewSubclass.m:

#import "OutlineViewSubclass.h"

@implementation OutlineViewSubclass

- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
printf("debug A\n");
return self;
}

- (void)awakeFromNib
{
printf("debug B\n");
}

@end

调试输出是:

debug B

为什么(id)initWithFrame:(NSRect)frame没有被调用?

最佳答案

Cocoa 控件实现 NSCoding 协议(protocol)以从 Nib 取消归档。 initWithCoder: 方法不是使用 initWithFrame: 初始化对象,然后设置属性,而是在使用 Interface Builder 配置的序列化属性加载控件时负责设置控件。这与使用 NSCoding 序列化任何对象的方式几乎相同。

如果您将自定义 NSView 子类粘贴在未实现 NSCoding 的 Nib 中,情况会有点不同,在这种情况下 initWithFrame: 将被调用。在这两种情况下,awakeFromNib 都会在对象加载后被调用,并且通常是在子类中执行额外初始化的好地方。

关于cocoa - initWithFrame 未调用,但 awakeFromNib 已调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/433539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com