在ApplicationWillTerminate中,Viewcontroller是零

时间:2017-05-21 06:31:55

标签: swift3 xcode8 viewcontroller optional appdelegate

在ApplicationWillTerminate的AppDelegate中,我创建了一个变量:

let firstVC = FirstViewController()
print(firstVC.lbl.text)

在我终止应用程序后,应用程序崩溃,因为"致命错误:在展开可选值"时意外发现nil。在我做了一些检查后,显然ViewController是零。

有人知道如何解决这个问题吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

就像我在评论中所说的那样,我无法想象 <asp:Button ID="Backbtn" runat="server" Text="Back" Width="84px" onclick="Backbtn_Click" /> <br /><br /> <asp:CheckBox ID="CheckBox1" runat="server" onclick="check" Text="Check"/> <table class="T-Table" > <tr> <th colspan="6"><em>IT INTERNAL USE</em></th> </tr> <tr> <td width="180px">Doc.No </td> <td>:</td> <td width="160px"> <asp:Label ID="DocNo" runat="server" Text="Label"></asp:Label> </td> <%-- <td width="180px">Job Complete Date </td> <td>:</td> <td width="160px"> </td> --%> </tr> <tr> <td>Received Date :</td> <td>:</td> <td> <asp:Label ID="RDate" runat="server" Text="Label"></asp:Label> </td> <td>Response Time (HR) :</td> <td>:</td> <td><asp:TextBox ID="Response_T" runat="server" TextMode="DateTimeLocal"></asp:TextBox> </td> </tr> <tr> <td>Remarks </td> <td>:</td> <td colspan="5"><asp:TextBox ID="Remarks" runat="server" Rows="5" TextMode="MultiLine" Columns="80"></asp:TextBox></td> </tr> <tr> <td>Cost charge to Department </td> <td>:</td> <td><asp:TextBox ID="Cost" runat="server" ></asp:TextBox></td> <td>Status</td> <td>:</td> <td> <asp:DropDownList ID="Progress" runat="server"> <asp:ListItem Text="Done" Value="Done"></asp:ListItem> <asp:ListItem Text="In Progress" Value="In Progress"></asp:ListItem> <asp:ListItem Text="Pending" Value="Pending"></asp:ListItem> </asp:DropDownList></td> </tr> 是零,因为唯一可能的方法就是它的init是可用的,这是不可能的,因为你无法覆盖firstVC有一个可用的,然后编译器会抱怨你必须说UIViewController.init()。这说明了Swift可选类型的美妙。

要验证:print(firstVC?.lbl.text)应该打印为零。连接出口的逻辑仅在您从故事板中实例化print(firstVC.lbl)或从NIB加载时运行。

无论如何,如果您只是创建FirstViewController的新实例,那么不会反映用户对“屏幕上”元素所做的任何更改,但每个元素都包含{{1}将具有其默认值。

可能的解决方案: