2016-03-19 11 views
0

Entwickeln einer App, die Schuhgrößen konvertiert. Aber ich bekomme diesen Fehler beim Start.Xcode Swift EXC_BAD_INSTRUCTION

EXC_BAD_INSTRUCTION (code=EXC_1386_INOP, subcode=0x0)

Hier ist mein Code:

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet weak var mensShoeSizeTextField: UITextField! 

    @IBOutlet weak var mensConvertedShoeSizeLabel: UILabel! 


    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. 
    } 

    @IBAction func convertButtonPressed(sender: UIButton) { 
     let sizeFromTextField = mensConvertedShoeSizeLabel.text 
     let numberFromTextField = Int(sizeFromTextField!) 
     var integerFromTextField = numberFromTextField! 
     let conversionConstant = 30 
     integerFromTextField += conversionConstant 
     mensConvertedShoeSizeLabel.hidden = false 
     let stringWithUpdatedShoeSize = "\(integerFromTextField)" 
     mensConvertedShoeSizeLabel.text = stringWithUpdatedShoeSize 
    } 
} 
+0

Was ist das vollständiger Fehler? – Ro22e0

+0

2016-03-18 21: 48: 15.409 BetterShoeConverter [4841: 1362844] Key-Ebene, die Typ 4 für Tastatur unterstützt, kann nicht gefunden werden iPhone-PortraitChoco-NumberPad; mit 1336863583_PortraitChoco_iPhone-Simple-Pad_Default Schwerwiegender Fehler: unerwartet gefunden Null beim Entpacken ein optionaler Wert –

+0

Welche Zeile ist der Fehler? Es tritt wahrscheinlich entweder bei 'let numberFromTextField = ...' oder 'var integerFromTextField = ...' auf, weil diese beiden Zeilen optionale Optionen auspacken, wie im Fehler angegeben. Überprüfen Sie, ob 'sizeFromTextField' ein Nicht-Null-Wert ist. – tktsubota

Antwort

0

Wenn der Fehler unexpectedly found nil while unwrapping an Optional value dann ist es wahrscheinlich durch eine der folgenden Linien verursacht werden:

let numberFromTextField = Int(sizeFromTextField!) 
var integerFromTextField = numberFromTextField! 

Hier können Sie Kraft sind Abwickeln die optionalen Werte, so erhalten Sie , wenn sie nil sind. Dies ist besonders problematisch beim Analysieren einer String als Int, wobei Int(string) Nil zurückgibt, wenn es die Zeichenfolge nicht als eine Zahl analysieren konnte.

Sie sollten Ihren Code ändern elegant die Null-Werte zu handhaben:

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet var mensShoeSizeTextField: UITextField? 

    @IBOutlet var mensConvertedShoeSizeLabel: UILabel? 

    @IBAction func convertButtonPressed(sender: UIButton) { 
     if let sizeFromTextField = mensShoeSizeTextField?.text, let mensConvertedShoeSizeLabel = mensConvertedShoeSizeLabel, let integerFromTextField = Int(sizeFromTextField) { 
      let conversionConstant = 30 
      let convertedIntegerFromTextField = integerFromTextField + conversionConstant 
      mensConvertedShoeSizeLabel.hidden = false 
      let stringWithUpdatedShoeSize = "\(convertedIntegerFromTextField)" 
      mensConvertedShoeSizeLabel.text = stringWithUpdatedShoeSize 
     } 
    } 
} 
1

Beide Fehler unterschiedlich sind.
1. Wenn die Tastatur nicht gefunden wird, ist dies eine Warnung, weil Sie die Tastatur möglicherweise von den Simulatoreinstellungen ausschließen. Versuchen Sie, diese Warnung

iOS Simulator -> Hardware -> Keyboard -> Toggle Software Keyboard 
    spülen
  1. fataler Fehler: unerwartet null gefunden, während ein optionaler Wert Abwickeln Dies verursacht, weil irgendwo in Ihrem Code Sie sind nicht richtig die optionals Abwickeln .
    Eine Sache, die ich aus dem Code sehen kann, ist Sie Abwickeln das nicht:

    lassen numberFromTextField = Int

es so probieren (sizeFromTextField!):

 let sizeFromTextField = mensConvertedShoeSizeLabel.text 
     if let numberFromTextField = Int(sizeFromTextField!) { 
      var integerFromTextField = numberFromTextField 
      let conversionConstant = 30 
      integerFromTextField += conversionConstant 
      mensConvertedShoeSizeLabel.hidden = false 
      let stringWithUpdatedShoeSize = "\(integerFromTextField)" 
      mensConvertedShoeSizeLabel.text = stringWithUpdatedShoeSize 

     } 
Verwandte Themen