Constantly getting this error: Thread 1: EXC_BAD_INSTRUCTION(code=EXC_l386_INVOP,subcode=0x0)
Constantly getting this error: Thread 1: EXC_BAD_INSTRUCTION(code=EXC_l386_INVOP,subcode=0x0)
我经常遇到此错误,我真的不知道为什么,因为该应用程序相当简单,而且我是在 YouTube 上的教程基础上构建的,似乎一切正常。 (本教程是在 Swift 2 中编写的,但是我已经在使用 Swift 3)有人可以帮助我吗?
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
我猜这次崩溃是因为您使用了隐式解包选项,即顶部的 !
变量。这些是允许为 nil
的变量,但如果在 nil
.
时访问会导致崩溃
首先,让应用程序在调试器中停止,这样您就可以看到是哪一行造成的。然后,确认您已在 Interface Builder 中正确连接所有内容。我的猜测是这些 @IBOutlet
变量中的一个或多个未正确连接。
我经常遇到此错误,我真的不知道为什么,因为该应用程序相当简单,而且我是在 YouTube 上的教程基础上构建的,似乎一切正常。 (本教程是在 Swift 2 中编写的,但是我已经在使用 Swift 3)有人可以帮助我吗?
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
我猜这次崩溃是因为您使用了隐式解包选项,即顶部的 !
变量。这些是允许为 nil
的变量,但如果在 nil
.
首先,让应用程序在调试器中停止,这样您就可以看到是哪一行造成的。然后,确认您已在 Interface Builder 中正确连接所有内容。我的猜测是这些 @IBOutlet
变量中的一个或多个未正确连接。