InitWithCoder 从未调用过 Cocoa 基于 NSView class
InitWithCoder never called for Cocoa NSView based class
我创建了一个XIB
.
我创建了这个名为 MyCustomView
的 class 并将其分配给 XIB
的文件所有者。
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) [self load];
return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) [self load];
return self;
}
- (void)load {
NSArray* topLevelObjects;
[[NSBundle mainBundle] loadNibNamed:@"MyCustomView"
owner:self
topLevelObjects:&topLevelObjects];
NSView* view;
for (id aView in topLevelObjects) {
if ([umaVista isKindOfClass:[NSView class]]) {
view = umaVista;
break;
}
}
[self addSubview:view];
view.frame = self.bounds;
}
我在主应用程序上创建了一个 NSView
。
我将该视图更改为 MyCustomView
。
我运行 应用程序。 MyCustomView
的 initWithCoder
没有 运行。 initWithFrame
没有 运行。 awakeFromNib
没有 运行。
没有任何反应。
有什么想法吗?
"File's Owner" as I've written elsewhere,不是存档中的真实对象。这是一个占位符。当您打开笔尖包装时,会使用一个预先存在的对象。
看起来您应该只是将自定义视图的一个实例放入笔尖。不要让它成为文件所有者,只需从对象面板中拖出一个视图,然后在身份检查器(右窗格,顶部;按 ⌘-⌥-3)中更改它的 class。也在 nib 中构建子视图。
然后让您的 NSBundle
为您加载笔尖。您的自定义视图将获得 initWithCoder:
和 awakeFromNib
,并且您无需通过层次结构来查找特定的子视图。
我创建了一个XIB
.
我创建了这个名为 MyCustomView
的 class 并将其分配给 XIB
的文件所有者。
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) [self load];
return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) [self load];
return self;
}
- (void)load {
NSArray* topLevelObjects;
[[NSBundle mainBundle] loadNibNamed:@"MyCustomView"
owner:self
topLevelObjects:&topLevelObjects];
NSView* view;
for (id aView in topLevelObjects) {
if ([umaVista isKindOfClass:[NSView class]]) {
view = umaVista;
break;
}
}
[self addSubview:view];
view.frame = self.bounds;
}
我在主应用程序上创建了一个 NSView
。
我将该视图更改为 MyCustomView
。
我运行 应用程序。 MyCustomView
的 initWithCoder
没有 运行。 initWithFrame
没有 运行。 awakeFromNib
没有 运行。
没有任何反应。
有什么想法吗?
"File's Owner" as I've written elsewhere,不是存档中的真实对象。这是一个占位符。当您打开笔尖包装时,会使用一个预先存在的对象。
看起来您应该只是将自定义视图的一个实例放入笔尖。不要让它成为文件所有者,只需从对象面板中拖出一个视图,然后在身份检查器(右窗格,顶部;按 ⌘-⌥-3)中更改它的 class。也在 nib 中构建子视图。
然后让您的 NSBundle
为您加载笔尖。您的自定义视图将获得 initWithCoder:
和 awakeFromNib
,并且您无需通过层次结构来查找特定的子视图。