アプリケーション (ストーリーボード ベース) 全体で特定のサブビューを再利用するために、サブビューを nib として構築し、読み込むことにしました。これを行うには、次のことを行いました。
Widget と呼べる UIView サブクラスがあります。対応する xib ファイルを作成し、File owner プロパティを新しいサブクラスに設定し、IBOutlets を接続します。
次に、ストーリーボードで、View Controller 内に 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 が何度も呼び出されていることがわかりました。
この状況でペン先を使用するために 2 つの方法を混ぜ合わせたように見えますが、どこが間違っていたのかは不明です。必要に応じてスタック トレースをスローすることもできますが、基本的には、同じ関数への無限のネストされた呼び出しです。