在ApplicationWillTerminate的AppDelegate中,我创建了一个变量:
let firstVC = FirstViewController()
print(firstVC.lbl.text)
在我终止应用程序后,应用程序崩溃,因为"致命错误:在展开可选值"时意外发现nil。在我做了一些检查后,显然ViewController是零。
有人知道如何解决这个问题吗?
非常感谢
答案 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}将具有其默认值。
可能的解决方案:
FirstViewController
中的有效lbl
个实例并保存其FirstViewController
文字