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的主要内容,如果未能解决你的问题,请参考以下文章
在 UISearchbar iOS 中 selectedTextRange 返回 nil
当我尝试在第二个组件中设置数据时,UIPickerView selectedRowInComponent:0 总是首先返回零
UIPickerView selectedRowInComponent:当我尝试在第二个组件中设置数据时,0总是先返回零
使用 addSubview 动态添加 UITextField 的 UITableViewCell - 如何在键盘上“返回”时获取 UITextField 值