2016-10-04 63 views
0

我經常得到這個錯誤,我真的不知道爲什麼,因爲應用程序很簡單,我建立它在YouTube上的教程一切似乎正常工作。 (這個教程是用Swift 2編寫的,但是我已經在使用Swift 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變量中的一個或多個變量未正確連線。

相關問題