为什么swift uiview没有连接到视图控制器?

时间:2016-03-23 19:39:18

标签: ios swift uiview uiviewcontroller iboutlet

所以这是一个奇怪的问题,我甚至不确定提供什么信息。我有一个嵌入在视图控制器中的自定义视图控制器和UIview。我在连接的视图控制器中为UIView创建了一个插座。一切看起来都不错,但是当我运行我的程序时,viewcontroller和uiview正在连接,但是uiview并没有成为视图控制器的属性。 (好像它是在代码中的其他地方启动的)这会产生异常,因为当我去设置委托时,视图被视为零。这是我正在看的图片:

enter image description here

因此,根据我设置插座的方式,视图对象应通过calendarview属性链接到视图控制器。

以下是所请求的异常:

enter image description here

有关如何进一步调试此问题的任何想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

CalendarView之前,dayLabel出口可能已连接并初始化。在初始化期间(我推断),它正在立即调用其委托,并遇到未初始化的dayLabel。请记住,初始化是一个随时间发生的序列;网点不会立即初始化。

要实现的关键是,只有在viewDidLoad()被调用的时候才能保证出口完全连接,而不是之前。因此,在该方法中使用调试打印和导致错误的方法,并首先查看哪个是真正发生的。我知道在哪里赌我的钱。

同时将didSet { print("Hey I got initialized!") }属性观察者放在@IBOutlets上,以监控其准确时间。这会强制启动代码告诉您它在做什么时。

我不知道你的完整UI流程;你应该把整个代码库粘贴到某个地方。但这可能是正确的:

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

而不是假设它准备就绪。