2015-12-18 8 views
1

Я создал пользовательский вид (ImageAndToolBarContainerView) с соответствующим XIB-файлом, который я бы хотел загрузить в несколько UIViewControllers в моем приложении.Загрузка пользовательского UIView из ниба вызывает бесконечный цикл или генерирует исключение nil

Я искал правильный учебник о том, как это сделать, но почти каждый, с которым я сталкивался, слишком стар или вызывает серьезные исключения.

При попытке загрузить его через раскадровку/NIB, (я создаю представление в UIViewController на раскадровке и я установить атрибут «класс» в ImageAndToolBarContainerView. Я поставил точек, в том числе вида, но ни один из них не кажется, для загрузки, когда называется классом, и я получаю ошибку:

фатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение

при попытке доступа к представлению:

required init?(coder aDecoder: NSCoder) 
{ 
    super.init(coder: aDecoder) 
    //setup() 
    self.view.frame = self.bounds 
    self.addSubview(view) 
} 

Затем я попробую использовать следующий код для загрузки NIB (раскомментируя вышеприведенную функцию setup(). Код настройки таков:

func setup() 
{ 
    self.loadViewFromNIB() 
    self.view.frame = self.bounds 
    self.addSubview(view) 
} 

func loadViewFromNIB() -> UIView 
{ 
    let bundle = NSBundle(forClass: self.dynamicType) 
    let nib = UINib(nibName: "ImageAndToolBarContainer", bundle: bundle) 
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 
    return view 
} 

Это, конечно, ведет к бесконечному циклу.

Я также следующая функция заявляет:

override func awakeFromNib() 
{ 
    super.awakeFromNib() 
    self.view.frame = self.bounds 
    self.addSubview(view) 
} 

Что я здесь отсутствует? Где я неправ? Есть ли окончательный учебник в том, как это сделать правильно?

+0

чисто FWIW. действительно, вы должны просто использовать ** контейнерный вид ** в эти дни. это своего рода «слон в комнате» с программированием iOS. ** все ** должно быть просто контейнером. это невероятно просто. Apple сделала это точно, чтобы устранить все проблемы, о которых вы говорите. long tutorial http://stackoverflow.com/a/23403979/294884 – Fattie

+0

Кто является файловым владельцем .nib вашего пользовательского вида? И как вы создаете свои контроллеры просмотра? Выходят они из раскадровки или другого .nib? –

+0

Похоже, вы устанавливаете 'ImageAndToolBarContainerView' в поле' Class' 'View', а не устанавливаете его в' File's Owner'. – eMdOS

ответ

1

Бесконечный цикл, вероятно, вызван тем, что вы установили владельца файла, а также подклассифицировали класс View в имя класса View.