Ios 尝试使用Swift在Label.text中显示浮点时的EXC_BAD_指令
你好吗? 我是使用Swift的iOS开发人员的新手,遇到了一个问题。我需要从一个方程中得到一个浮点结果,并将其设置为label.text 在查看文档(如果答案在那里,很抱歉,我还不能理解上面写的所有内容…仍在学习)并在google上搜索答案后,我发现了以下解决方案: (其中比索、Meta和Coef是浮点数,pesoInput和metaLabel是字符串) 如您所见,我需要执行定义“meta”的操作,然后在UILabel metaLabel中显示它 我设置了println命令来打印三个浮动,所有这些都是正确的,包括操作结果 但是,它在控制台中给了我以下错误:Ios 尝试使用Swift在Label.text中显示浮点时的EXC_BAD_指令,ios,xcode,swift,Ios,Xcode,Swift,你好吗? 我是使用Swift的iOS开发人员的新手,遇到了一个问题。我需要从一个方程中得到一个浮点结果,并将其设置为label.text 在查看文档(如果答案在那里,很抱歉,我还不能理解上面写的所有内容…仍在学习)并在google上搜索答案后,我发现了以下解决方案: (其中比索、Meta和Coef是浮点数,pesoInput和metaLabel是字符串) 如您所见,我需要执行定义“meta”的操作,然后在UILabel metaLabel中显示它 我设置了println命令来打印三个浮动,所有这
fatal error: unexpectedly found nil while unwrapping an Optional value
编辑器上出现以下错误:
Thread 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOC, subcode=0x0)
正如您所知,在调试区域中,唯一存在的nil值是:
metaLabel = (UILabel!) = nil
故事板中的metaLabel不是空的,它被设置为0.01,因为我测试了is是0.00这一事实是否产生了nil
需要帮助,伙计们!谢谢
编辑:
下面是全部代码,伙计们:
import UIKit
import Foundation
class ViewController: UIViewController{
//Vars Sexo, Peso e Coef
var sexo = ""
var peso : Float = 0.0
var coef : Float = 0.039
var meta : Float = 0.0
//Alerta
var tituloalertaPeso = "Peso Inválido"
var mensagemalertaPeso = "Por favor, cheque o peso!"
@IBAction func botaoMasc(sender: AnyObject) {
var sexo = "masculino"
}
@IBAction func botaoFem(sender: AnyObject) {
var sexo = "feminino"
}
@IBOutlet weak var pesoInput: UITextField!
@IBOutlet weak var metaLabel: UILabel!
@IBAction func okConfig(sender: AnyObject) {
metaLabel.text = "0.01"
//CONVERSAO STRING -> FLOAT
if (pesoInput.text as NSString).floatValue < 10 || (pesoInput.text as NSString).floatValue > 160 {
let alertaPeso = UIAlertController(title: "Peso Inválido", message:
"Por favor, precisamos do seu peso para fazer os cálculos!", preferredStyle: UIAlertControllerStyle.Alert)
alertaPeso.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertaPeso, animated: true, completion: nil)
}
else {
peso = (pesoInput.text as NSString).floatValue
meta = peso * coef
// THE FOLLOWING LINE IS THROWING THE EXC:
metaLabel.text = NSString(format: "%.2f", meta)
}
}
override func viewDidLoad () {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
导入UIKit
进口基金会
类ViewController:UIViewController{
//巴西比索
var sexo=“”
比索风险值:浮动=0.0
变量系数:浮动=0.039
变量meta:Float=0.0
//艾尔塔
var tituloalertaPeso=“投资比索”
var mensagealertapeso=“请帮我一个忙,支票是比索!”
@iAction func botaoMasc(发送方:AnyObject){
var sexo=“阳性”
}
@IBAction func botaoFem(发送方:AnyObject){
var sexo=“女性化”
}
@IBOutlet弱var pesoInput:UITextField!
@IBVAR弱金属标签:UILabel!
@iAction func okConfig(发送方:AnyObject){
metaLabel.text=“0.01”
//CONVERSAO字符串->浮点
if(pesoInput.text作为NSString)。floatValue<10 | |(pesoInput.text作为NSString)。floatValue>160{
让alertaPeso=UIAlertController(标题:“比索投资”,信息:
“请帮个忙,我要给你比索金币!”首选样式:UIAlertControllerStyle.Alert)
addAction(UIAlertAction(标题:“Ok”,样式:UIAlertActionStyle.Default,处理程序:nil))
self.presentViewController(alertaPeso,动画:true,完成:nil)
}
否则{
peso=(pesoInput.text作为NSString.floatValue)
梅塔=比索*coef
//下面一行是EXC:
metaLabel.text=NSString(格式:“%.2f”,meta)
}
}
覆盖func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
}
我相信这与行peso=(pesoInput.text作为NSString.floatValue)有关。如果您的文本为空,我相信它会从该转换返回nil
。此时,您正试图从nil
值中获取floatValue
。如果metalabel
为nil
,您将得到致命错误:在访问其text
属性(metalabel.text=“something”
)时,在展开可选值时意外发现nil
您应该检查连接到xib的metalabel
插座连接
可能您没有将xib连接到视图控制器:
或者连接中断:尝试断开并重新连接插座。从哪个函数(例如viewDidLoad()…)调用您的代码?它在iAction中,我将发布整个代码!请指出抛出exceptionHi@ThomasKilian的行,该行为metaLabel.text=NSString(格式:“%.2f”,meta)。我也会在帖子中指出。谢谢你们,找到问题了。太尴尬了,哈哈。对于那些有同样问题的人来说:问题是我的okConfig按钮调用了一个新的模态视图控制器,而我试图设置其值的标签就在这个新的视图控制器上。我在按钮的同一个视图控制器中放置了一个标签,用于测试,它成功了。谢谢大家!!从所有的帮助中也学到了很多。对不起,我没有发布全部代码。看看这段代码,它确实有意义!但是,peso值来自文本字段输入(pesoInput),在整个操作开始之前填充,所以我认为这不是问题所在。谢谢!但还是没什么。。。我重拨了插座连接,尝试将其重命名。。。然而,它仍然存在。
import UIKit
import Foundation
class ViewController: UIViewController{
//Vars Sexo, Peso e Coef
var sexo = ""
var peso : Float = 0.0
var coef : Float = 0.039
var meta : Float = 0.0
//Alerta
var tituloalertaPeso = "Peso Inválido"
var mensagemalertaPeso = "Por favor, cheque o peso!"
@IBAction func botaoMasc(sender: AnyObject) {
var sexo = "masculino"
}
@IBAction func botaoFem(sender: AnyObject) {
var sexo = "feminino"
}
@IBOutlet weak var pesoInput: UITextField!
@IBOutlet weak var metaLabel: UILabel!
@IBAction func okConfig(sender: AnyObject) {
metaLabel.text = "0.01"
//CONVERSAO STRING -> FLOAT
if (pesoInput.text as NSString).floatValue < 10 || (pesoInput.text as NSString).floatValue > 160 {
let alertaPeso = UIAlertController(title: "Peso Inválido", message:
"Por favor, precisamos do seu peso para fazer os cálculos!", preferredStyle: UIAlertControllerStyle.Alert)
alertaPeso.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertaPeso, animated: true, completion: nil)
}
else {
peso = (pesoInput.text as NSString).floatValue
meta = peso * coef
// THE FOLLOWING LINE IS THROWING THE EXC:
metaLabel.text = NSString(format: "%.2f", meta)
}
}
override func viewDidLoad () {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}