我正在使用Xcode
和Swift
开发我的第一个iOS应用。我的应用有多个UIViewController
(= VC)。一切正常,但有一个错误,我无法借助Google或StackOverflow独自解决。
我的问题是:
我在VC“ CompleteTest”中有一个名为“ Quit”的UIButton
,我控制将其Main
情节提要中拖到VC“主菜单”中,以便将用户带回到按下“主菜单”。
但是,当我在模拟器中单击此UIButton
时,错误:
线程1信号SIGABRT出现。
这不是我第一次偶然发现此错误,而且我看到堆栈中有多个线程溢出为该问题提供了解决方案。过去,通过检查出口,我可以很轻松地解决此错误。 但是在这种情况下,此解决方案不起作用,因为出口看起来不错(没有显示感叹号)。
更奇怪的是显示错误的位置。
如果我没记错的话,通常SIGABRT
中会显示AppDelegate
错误。
但就我而言,它显示在VC'CompleteTest'文件的第54行。在这一行中,我正在使用覆盖函数“ prerpare”将数据传输到下一个VC“最终完成测试”。
不幸的是,我无法在这个问题中添加图片,甚至很难 我准备好了无论如何,我希望我的问题仍然清楚。
此外,请原谅我的英语不好,因为这是我的第二语言。
我应该如何进行?预先感谢您的帮助!
import UIKit
class CompleteTest: UIViewController {
// Components of Visualisation VC
@IBOutlet weak var ShotNumber: UILabel!
@IBOutlet weak var ProjectedScore: UILabel!
@IBOutlet weak var Distance: UILabel!
var sum: Double = 100.0 //sum represents overall Score of Test
@IBOutlet weak var Report: UIButton!
var help: Int = 0 // var 'help' is helping to change the number showed on the Scoring Buttons in VC
@IBOutlet weak var Left1: UIButton!
@IBOutlet weak var Right1: UIButton!
@IBOutlet weak var Center1: UIButton!
@IBOutlet weak var BadContact1: UIButton!
//Percentage components
var leftpct: Int = 0
var rightpct: Int = 0
var centerpct: Int = 0
var totalpct: Int = 0
var badcontactpct: Int = 0
// Transfer of data from ViewController 'CompleteTest' to ViewController 'FinalCompleteTest'
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let finalCompleteTest = segue.destination as! FinalCompleteTest
finalCompleteTest.score = String(sum)
finalCompleteTest.Leftpct = Int(leftpct)
finalCompleteTest.Rightpct = Int(rightpct)
finalCompleteTest.Centerpct = Int(centerpct)
finalCompleteTest.Totalpct = Int(totalpct)
finalCompleteTest.BadContactpct = Int(badcontactpct)
}
override func viewDidLoad() {
super.viewDidLoad()
Report.isHidden = true
}
//Scoring Buttons
@IBAction func BadContact(_ sender: Any) {
sum -= 1
BadContact1.setTitle("OK", for: .normal)
badcontactpct += 1
}
@IBAction func Left(_ sender: Any) {
sum -= 0.5
help += 1
Left1.setTitle(String(help), for: .normal)
if help == 1 {
leftpct += 1
totalpct += 1}
}
@IBAction func Right(_ sender: Any) {
sum -= 0.5
help += 1
Right1.setTitle(String(help), for: .normal)
if help == 1 {
rightpct += 1
totalpct += 1}
}
@IBAction func Center(_ sender: Any) {
Center1.setTitle("0", for: .normal)
centerpct += 1
totalpct += 1
}
答案 0 :(得分:-1)
感谢您抽出宝贵的时间来写这样一个彻底的问题。如果需要,可以将图像上传到其他站点(例如imgur),然后在此处使用直接链接。
与matt mentions in the comments一样,该as!
可能是您看到此崩溃的原因。如果将代码替换为以下内容,则可以轻松证明这一点:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let finalCompleteTest = segue.destination as? FinalCompleteTest {
finalCompleteTest.score = String(sum)
finalCompleteTest.Leftpct = Int(leftpct)
finalCompleteTest.Rightpct = Int(rightpct)
finalCompleteTest.Centerpct = Int(centerpct)
finalCompleteTest.Totalpct = Int(totalpct)
finalCompleteTest.BadContactpct = Int(badcontactpct)
} else {
print("oh no, segue.destination is not a FinalCompleteTest")
}
}
如果您可以在控制台中看到该消息,则可能是您在故事板上没有正确连接某些东西。
如果没有,请尝试向我们提供更多信息。
如果您不了解在代码中使用!
的“危险”,请先尝试了解Optionals,不要犹豫,询问是否需要更多帮助。
祝你好运!