Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift &引用;在展开可选值“时意外发现nil”;将值推送到另一个视图控制器上的label.text_Swift_Delegates - Fatal编程技术网

Swift &引用;在展开可选值“时意外发现nil”;将值推送到另一个视图控制器上的label.text

Swift &引用;在展开可选值“时意外发现nil”;将值推送到另一个视图控制器上的label.text,swift,delegates,Swift,Delegates,我在这件事上迷路了。我已经读了很多关于这个问题的答案,但我就是不能让它起作用 我有两个视图控制器-ScheduleService是故事板的一部分,CalendarView不是。我在CalendarView中创建了一个日历,当用户在日历上选择日期时,我希望将该日期推送到ScheduleService上的label.text 起初我认为这很容易: let viewControllerSS = ScheduleService() viewControllerSS.infoLabel.text = lb

我在这件事上迷路了。我已经读了很多关于这个问题的答案,但我就是不能让它起作用

我有两个视图控制器-ScheduleService是故事板的一部分,CalendarView不是。我在CalendarView中创建了一个日历,当用户在日历上选择日期时,我希望将该日期推送到ScheduleService上的label.text

起初我认为这很容易:

let viewControllerSS = ScheduleService()
viewControllerSS.infoLabel.text = lbl.text
Intellisense可以看到infoLabel控件,但当我尝试为其赋值时,会出现标题中所述的错误:

“在展开可选值时意外发现nil”

在ScheduleService类中,我创建了一个标签:

@IBOutlet weak var infoLabel: UILabel!

如何成功地将值从CalendarView上的lbl.text推送到ScheduleService上的infoLabel.text,而不出现此错误?

使用
@IBOutlet
可以绑定为您实例化的脚本实例。如果您没有从故事板实例化,那么故事板没有创建它们,没有任何东西可以绑定到变量,因此它们保持为零

您可以实例化视图控制器,然后调用设置绑定的
init(coder:)
,如果您已经在故事板中这样做了


如果您更愿意使用编程视图控制器,则必须自己创建标签,将其添加为子视图,并将其放置在
viewDidLoad()
ScheduleService()
创建一个全新的控制器实例,该控制器的插座未连接。这不是故事板中的实例。您需要使用segue或实例化来引用故事板实例。好的,谢谢您的澄清。它必须通过实例化,因为CalendarView不在故事板上(它只是项目中的一个swift文件),所以我不能使用segue,除非有方法以编程方式创建一个segue。委派可以解决这个问题吗?因为创建实例时不会加载视图。解决此问题的最简单方法之一是强制查看,以便强制创建子视图。让ViewControllers s=ScheduleService()\ux=ViewControllers.view ViewControllers.infoLabel.text=lbl.text