Ios 尝试使用Swift在Label.text中显示浮点时的EXC_BAD_指令

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命令来打印三个浮动,所有这

你好吗? 我是使用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.
}


}