2016-03-23 5 views
0

Так что это немного странный вопрос, и я даже не уверен, какую информацию предоставить. У меня есть настраиваемый контроллер представлений и UIview, встроенный в контроллер вида. Я создал выход для UIView в контроллере представления, который подключен. Все выглядит хорошо, но когда я запускаю свою программу, viewcontroller и uiview подключаются, но uiview не становится свойством контроллера представления. (Как будто он инициируется где-то еще в коде) Это создает исключение, потому что, когда я иду на установку делегата, вид рассматривается как нуль. Вот картина того, что я смотрю на:Зачем использовать быстрый просмотр uiview для просмотра контроллера?

enter image description here

Так основано на том, как настроить выход, объект вид должен быть связан с контроллером с помощью свойства calendarview.

Вот что исключение выглядит в соответствии с просьбой:

enter image description here

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

+0

Это случилось со мной несколько раз. Обычно помогает делать чистую сборку и удаление каталога производных данных. – Macondo2Seattle

+0

исключение добавлен. – Chris

+0

Как выглядит код, где вызывается функция сбоя? В частности, как он получает ссылку на ViewController? –

ответ

0

Возможно, что выход CalendarView подключен и инициализирован доdayLabel. Во время его инициализации (я выхожу) он сразу же вызывает своего делегата и встречается с неинициализированным dayLabel. Помните, что инициализация - это последовательность, которая происходит со временем; выходы не инициализируются вместе мгновенно.

Ключом к пониманию является то, что розетки гарантируют, что к моменту viewDidLoad() вызывается не раньше. Поэтому поставьте отладочную печать в этом методе и метод, вызывающий ошибку, и посмотрите, что происходит в первую очередь. Я знаю, где ставить свои деньги.

Также размещены didSet { print("Hey I got initialized!") } наблюдателей за недвижимостью на вашем @IBOutlets, чтобы следить за точным временем. Это заставляет код запуска сообщать вам, что он делает, когда.

Я не знаю вашего полного потока пользовательского интерфейса; вы должны вставить всю кодовую базу где-нибудь. Но это может быть правильным:

if let dayLbl = dayLabel { 
    dayLbl.text = date.stringWithDateOnly() 
} 

вместо предположения, что он готов.

Смежные вопросы