Для повторного использования определенного поднабора в моем приложении (которое основано на раскадровке), я решил построить подвью в качестве наконечника и загрузить его. , Я сделал следующее:Бесконечные рекурсивные вызовы initWithCoder при создании экземпляра xib в раскадровке
У меня есть подкласс UIView, который мы можем назвать Виджет. Я создаю соответствующий файл 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 в настоящее время подозвал и снова.
Кажется, что в этой ситуации я использовал два метода для использования наконечника, но я не знаю, где я ошибся. При необходимости я могу вырвать трассировку стека, но это в основном бесконечные вложенные вызовы для одной и той же функции.
, но если вы удалите значение пользовательского класса, невозможно использовать его IBOutlets и IBActions ... – nano
@nano Конечно, вы можете использовать пользовательский класс для своего вида; вам просто нужно предотвратить рекурсию. –
Какой лучший способ предотвратить рекурсию без удаления «Пользовательского класса» из xib? – Jaro