UITextField 总是返回 nil

Posted

技术标签:

【中文标题】UITextField 总是返回 nil【英文标题】:UITextField always results in nil 【发布时间】:2015-10-14 21:14:05 【问题描述】:

我正在尝试获取 UITextField 的信息,然后使用 swift 2.0 和 Xcode 7 重用来自 UITextField 的数据。但是每次我运行应用程序时,应用程序都会崩溃并显示:

致命错误:在展开可选值时意外发现 nil

即使文本字段中有内容。 有人知道如何解决这个问题吗?

这就是我的代码的样子:

@IBOutlet weak var entryAmount: UITextField! //TextField declaration
@IBAction func saveNewButtonTapped(sender: UIBarButtonItem) 
        //update overall amount
        let amount: String? = self.entryAmount.text! //Throws the error at this point
        self.viewController.currentValue += amount

在另一个函数中,我写了同样的东西(“let amount: String? = entryAmount.text!”),当我打印“amount”时,它显示了正确的结果。但是一旦我尝试进一步使用它,“数量”总是设置为零,即使它总是在开始时打印正确的结果。

我在 DatePicker、开关和更新按钮文本方面遇到了同样的问题。

有人知道可以帮助我吗? - 谢谢

顺便说一句,我对 swift 和 Xcode 还是很陌生。

更新:会不会是因为 TextField 在 ContainerView 中?

更新二:我很确定问题出在 ContainerView 上。我尝试了一个不在 containerView 中的 TextField 并且没有收到错误,它工作得非常好。

【问题讨论】:

尝试使用po 命令进行调试。当它抛出时,输入po self.entryAmount 来检查它是否为零。或po self.entryAmout.text 检查text 是否为零。 我试过了,两者都是零。 (lldb) po self.entryAmount fatal error: unexpectedly found nil while unwrapping an Optional value fatal error: unexpectedly found nil while unwrapping an Optional value nil (lldb) po self.entryAmount.text fatal error: unexpectedly found nil while unwrapping an Optional value error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). The process has been returned to the state before expression evaluation. 【参考方案1】:

请在您的 Interface Builder 中检查 UITextField 是否正确链接到您的“entryAmount”IBOutlet。可能是它们没有正确连接,这就是为什么在运行时该值为 nil。

【讨论】:

【参考方案2】:

我可能是错的,但从您的问题看来,您在确定范围时遇到了问题。您在函数中声明的任何变量都仅限于该函数。

在 saveNewButtonTapped 中声明金额意味着金额仅在该函数中设置。在另一个函数中使用数量将导致数量为零。如果要在函数之间使用变量,则需要在函数之外声明它们。

在示例中,我有 var runningAmount。在示例中,如果我按下调用 pressAnotherButton 的按钮,我会得到同样的致命错误,因为我在设置 self.runningAmount 之前对其进行了解包。但是,如果我按下调用 saveNewButtonTapped 的按钮,即使文本字段中没有任何内容,然后按下调用 pressAnotherButton 的按钮,我会在照片中得到输出。

【讨论】:

文本字段在类的开头声明,在类的末尾声明函数,如果这是你的意思。 意思更像是 ViewController 的子类中的代码?你说的容器是什么意思?是uiview的子视图吗? 是的,它在 UIViewController 的子类中。我刚刚尝试了你所说的,但我仍然得到错误,它仍然是零。对于容器,我的意思是 TextField 在 containerView 中,我认为这就是问题所在。因为我尝试了另一个不在 containerView 中的 TextField 并且它工作得非常好。 - 感谢您的帮助!

以上是关于UITextField 总是返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

selectedTextRange 总是返回 nil

在 UISearchbar iOS 中 selectedTextRange 返回 nil

当我尝试在第二个组件中设置数据时,UIPickerView selectedRowInComponent:0 总是首先返回零

UIPickerView selectedRowInComponent:当我尝试在第二个组件中设置数据时,0总是先返回零

UITextField 返回按钮的默认行为是啥?

使用 addSubview 动态添加 UITextField 的 UITableViewCell - 如何在键盘上“返回”时获取 UITextField 值