Для повторного использования определенного подвью во всем моем приложении (которое основано на раскадровке), я решил построить subview как наконечник и загрузить его. Для этого я сделал следующее:
У меня есть подкласс UIView, который мы можем назвать Widget. Я создаю соответствующий файл xib, устанавливаю свойство владельца файла в свой новый подкласс, подключаю IBOutlets.
Затем в моей раскадровке у меня есть uiview внутри контроллера представления, и я установил его класс в класс Widget, который я создал.
В классе виджетов я переопределяю initWithCoder и там загружаю нить следующим образом:
-(id)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super initWithCoder:aDecoder])){
[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"Widget" owner:self options:nil] objectAtIndex:0]];
}
return self;
}
Приложение будет аварийно завершено, и установка точки останова здесь показала, что initWithCoder вызывается снова и снова.
Кажется, что в этой ситуации я использовал два метода для использования наконечника, но я не знаю, где я ошибся. При необходимости я могу сбросить трассировку стека, но это в основном бесконечные вложенные вызовы одной и той же функции.