2016-07-23 14 views
0

Ich arbeite an einem BMICalculator. Ich kann hier keinen optionalen Wert finden. Ich wählte ein Nummernfeld als Tastatur, so dass nur Zahlen eingegeben werden konnten.Xcode-Konsolenfehlermeldung: 'Schwerwiegender Fehler: unerwartet gefunden Null beim Entpacken eines optionalen Werts' (Swift)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let results = segue.destinationViewController as? ResultsController { 

     if let height = Double(heightTextField.text!), weight = Double(weightTextField.text!) { 
      let info = BMIInformation(cm: height, kg: weight) 
      let bmi = String(info.computeBMI()) 
      results.bmiValue.text = bmi 
     } 
    } 

} 

Hier ist meine Ergebnisse Controller-Klasse:

class ResultsController: UIViewController { 

    @IBOutlet weak var bmiValue: UILabel! 
    @IBOutlet weak var bmiDescription: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
+0

Welche Zeile löst die Ausnahme aus? Stellen Sie einen Breakpoint und einen einzelnen Schritt ein, um herauszufinden, was kein Nil ist, aber mein Verdacht ist, dass es "results.bmiValue" ist. Sie sollten eine andere Eigenschaft festlegen, anstatt direkt in das nächste Feld in prepareForSegue und den Wert put that properes in das Textfeld in viewWillAppear zu schreiben – Paulw11

Antwort

0

heightTextField.text! wahrscheinlich haben keinen Wert, wenn Sie versuchen, es zu erzwingen auszupacken

0

Da Sie nicht wissen, welche Linie den Absturz wirft, so ist meine Vermutung es

heightTextField.text sein kann!

verwenden Sie es einfach wie diese statt

(heightTextField? .text)!

Grund: Ich erwäge Sie haben einen Ausgang von heightTextField und es muss so etwas wie dieses

@IBOutlet schwach var heightTextField aussehen: UITextField!

Jetzt bedeutet der Ausruf am Ende dieser Zeile, dass die Variable einen Wert erwartet und es kann nicht Null sein, sehen Sie, ob das mit Ihrem Storyboard verbunden ist. Wenn nicht, dann wird es Null. Daher Absturz.

Setzen eines? in (heightTextField? .text)! fragt bei Verwendung dieser Variablen den Compiler, dass die Variable nicht abstürzen wird, auch wenn die Variable null erhält. Aber es wird auch nicht den Text geben, den Sie in Ihr Textfeld eingegeben haben könnten. Überprüfen Sie bitte die Konnektivität Ihres IBOutlet.

Wenn dies nicht Grund für einen Absturz ist, dann fügen Sie einen schnellen und alle Ausnahmen Breakpoint und versuchen, den Ort des Absturzes zu finden. Es wird dann einfacher zu erklären sein.