2016-10-04 9 views
0

私はこのエラーを常に受け​​取ります。なぜアプリケーションがかなりシンプルなのか、すべてが適切に機能しているように見えました。 (チュートリアルはスイフト2で書かれていましたが、私はすでにスイフト3を使用しています)誰も助けてくれますか?常にエラーが出ます:スレッド1:EXC_BAD_INSTRUCTION(コード= EXC_l386_INVOP、サブコード= 0x0)


import UIKit 

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 


    @IBOutlet var image1: UIImageView! 

    @IBOutlet var image2: UIImageView! 

    @IBOutlet var label1: UILabel! 

    @IBOutlet var label2: UILabel! 

    @IBOutlet var message: UILabel! 

    var data = [["USA", "Italy", "China", "England"], ["Beijing", "London", "Rome", "Washington, DC"] ] 

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

    func numberOfComponents(in pickerView: UIPickerView) -> Int { 

     return data.count // Based on data. No hardcoded number. 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

     return data[component].count 

     // For each component (we have 2 components in our array -> the two elements (Countries = USA, Italy, China, England & Capitals = Beijing, London, Rome, Washington) grab the count for the row. 

    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return data[component][row] 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

     let item1 = data[0][pickerView.selectedRow(inComponent: 0)] 
     let item2 = data[1][pickerView.selectedRow(inComponent: 1)] 

     print(item1) 
     print(item2) 

     // Grab whatever is selected in index [0] or index [1] into "selectedRow" contrast each other and compare if country and capital match each other. 

     // Now we refer to the images so that we don't have to type in the exact name over and over again. 

     let usa = UIImage(named: "USA.png") 
     let italy = UIImage(named: "Italy.jpeg") 
     let china = UIImage(named: "China.jpeg") 
     let england = UIImage(named: "England.jpeg") 

     let washington = UIImage(named: "Washington.jpeg") 
     let rome = UIImage(named: "Rome.jpeg") 
     let beijing = UIImage(named: "Beijing.jpeg") 
     let london = UIImage(named: "London.jpeg") 

     let correctMessage = "The Capital of \(item1) is \(item2)" 
     let wrongMessage = "Match the flags to the Capitals." 


     switch item1 { 

      case "USA": 

       image1.image = usa 
       label1.text = "USA" 

      case "Italy": 

       image1.image = italy 
       label1.text = "Italy" 

      case "China": 

       image1.image = china 
       label1.text = "China" 

      case "England": 

       image1.image = england 
       label1.text = "England" 

     default: 
       image1.image = usa 
       label1.text = "USA" 

     } // End Of Switch 1 

     switch item2 { 

      case "Beijing": 

       image2.image = beijing 
       label2.text = "Beijing" 

       if label1.text == "China" { 

        message.text = correctMessage 

       } 

       else { 

        message.text = wrongMessage 

      } 

      case "London": 

       image2.image = london 
       label2.text = "London" 

       if label1.text == "England" { 

        message.text = correctMessage 

      } 

       else { 

        message.text = wrongMessage 

      } 

      case "Rome": 

       image2.image = rome 
       label2.text = "Rome" 

       if label1.text == "Italy" { 

        message.text = correctMessage 

      } 

       else { 

        message.text = wrongMessage 

      } 

      case "Washington, DC": 

       image2.image = washington 
       label2.text = "Washington, DC" 

       if label1.text == "USA" { 

        message.text = correctMessage 

      } 

       else { 

        message.text = wrongMessage 

      } 

     default: 
       image2.image = washington 
       label2.text = "Washington, DC" 

     } // End Of Switch 2 




    } // End Of Did Select Row 

} // End Of ViewController | End Of App 

答えて

0

私はこのクラッシュは、暗黙のうちに開封されたオプションの一番上に、それらの!変数の使用から来ていることを推測しています。これらの変数はnilであることが許可されていますが、nilの場合はアクセスするとクラッシュする可能性があります。

まず、デバッガでアプリケーションを停止させて、どのラインが原因であるかを確認します。次に、Interface Builderですべてが正しく接続されていることを確認します。私の推測では、変数@IBOutletのうちの1つ以上が正しく配線されていません。

関連する問題