为了在整个应用程序中重用某个子视图(基于故事板),我决定将子视图构建为 nib,并将其加载。为此,我做了以下工作:
我有一个 UIView 子类,我们可以称之为 Widget。我创建了一个相应的 xib 文件,将 File owner 属性设置为我的新子类,连接 IBOutlets。
然后,在我的故事板中,我在视图控制器中有一个 uiview,我将它的类设置为我创建的 Widget 类。
在小部件类中,我覆盖了 initWithCoder,并在其中加载 nib,如下所示:
-(id)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super initWithCoder:aDecoder])){
[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"Widget" owner:self options:nil] objectAtIndex:0]];
}
return self;
}
应用程序此时会崩溃,在这里设置断点表明 initWithCoder 被一遍又一遍地调用。
在这种情况下,我似乎混合了两种使用笔尖的方法,但我不清楚我哪里出错了。如有必要,我可以抛出堆栈跟踪,但它基本上是对同一函数的无休止的嵌套调用。