2015-12-20 100 views
0

一個大的n00b這裏:-)EXC_BAD_INSTRUCTION當文本框爲空

我做了我的IOS第一個應用程序,並得到了一切,只要所有的文本字段都充滿工作。這個應用程序是一個簡單的計算應用程序,我需要一些幫助,確保該應用程序不會關閉時,字段爲空。

這是我的代碼,當按下一個簡單的計算按鈕。

class ViewController: UIViewController { 

@IBOutlet weak var panelWidthTextField: UITextField! 
@IBOutlet weak var panelHightTextField: UITextField! 
@IBOutlet weak var panelsWideTextField: UITextField! 
@IBOutlet weak var panelsHightTextField: UITextField! 
@IBOutlet weak var panelPitchTextField: UITextField! 

@IBOutlet weak var resultWithLabel: UILabel! 
@IBOutlet weak var resultHightLabel: 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 calculatePressButton(sender: AnyObject) { 
    let w = Double(panelWidthTextField.text!) 
    let sw = Double(panelsWideTextField.text!) 
    let pi = Double(panelPitchTextField.text!) 
    let sizew = SizeWidthModel(pw:w!,psw:sw!,ptc:pi!) 
    resultWithLabel.text=String(sizew.width()) 

    let h = Double(panelHightTextField.text!) 
    let sh = Double(panelsHightTextField.text!) 
    let sizeh = SizeHightModel(ph:h!,psh:sh!,ptc:pi!) 
    resultHightLabel.text=String(sizeh.hight()) 

} 

}

這是我的問題。 Error code

希望有人能指點我正確的方向。

編輯: 因爲我是一個完整的n00b在這個編碼我需要更多的幫助理解這一點。我試圖添加各種解決方案,但沒有運氣。我試圖得到一個消息,當用戶離開字段爲空時彈出,因爲計算需要填寫所有字段。 如果有人有時間引導我,將不勝感激:-)

+0

'讓W =雙(panelWidthTextField.text? 「」)' – vacawama

+2

讓我指出你正確的方向,然後:[Swift Optionals](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/DOC/UID/TP40014097-CH5-ID330)。這是Swift程序員的**鍵**概念。 :) – Moritz

+0

我想你剛剛學會了爲什麼'!'被非正式地稱爲「撞車經營者」 :) – TwoStraws

回答

0

花了我一段時間找出optionals,但希望這個解釋有幫助: 當從一個字符串(這是什麼panelWidthTextField.text)轉換爲一個Double,Swift不知道該字符串是否有效或不。既然它可能是有效的,或者它可能不包含有效值(是零),那麼它是一個可選的String ?,它可以包含一個有效的String或可以爲零的字符串。但僅僅因爲它可以是零並不意味着你可以在你的代碼中使用nil。

「!」說:「使用這個變量中的數據,即使它是零,因爲我不認爲它是零。」問題是,如果它是零,那麼雙(零)會崩潰你的應用程序。如果let(也有一個「if var」)會說「look into(unwrap)這個可選值,如果它有效,做第一組花括號(這是一個let或var賦值)的內容, 。否則做什麼在第二組括號

if let w = Double(panelWidthTextField.text!) { 
     // you're good to go 
    } else { 
     // give the user instructions on how to fix the error. 
    } 

的零合併運算符也可以幫助它讀取這樣的:

//展開一看它。如果它不是零。 ,則使用它,如果它是零,則使用默認值b

a ?? b 

如果你想放的默認值(如零,如果你需要一個有效的數字),嘗試:

var w = Double(panelWidthTextField.text!)?? 0 
0

只需檢查以查看用戶輸入了文字。在功能,把這樣的事情

if myTextField.text != "" { 
    //rest of the code 
} 

希望這會有所幫助。

相關問題