【问题标题】:Thread 1: signal SIGSTOP runtime error线程 1:信号 SIGSTOP 运行时错误
【发布时间】:2015-09-24 15:35:34
【问题描述】:

我对 Swift 很陌生,所以我不确定错误发生在哪里。

这是我的视图控制器。也许我没有正确调用函数,因为这个错误是在我包含改变时态的函数之后开始发生的。

有趣的是,如果我重新启动运行 iOS 9 的模拟器并且没有给我任何运行时错误,应用程序运行良好。我正在使用 Xcode 7.0 beta 版本。

任何帮助将不胜感激。

提前致谢。

import UIKit
import AVFoundation


class ViewController: UIViewController {


    let synth = AVSpeechSynthesizer()
    var myUtterance = AVSpeechUtterance(string: "")

    var sentence = ""

    let subject: [String] = ["I", "You", "He" , "She", "We", "They"]




    let verbNoun =  [["eat" ,"eats", "ate", "will eat", "an apple", "a banana", "a cake", "a sandwhich" ],
        ["drink" ,"drinks", "drank", "will drink", "water", "milk","tea","coffee"]]



    var i = 0
    var j = 0
    var t = 0
    var k = 4
    var subjectCount = 6  //var subjectCount = subject.count()
    var verbCount = 2
    var nounCount = 4
    var tense = "present"


    func modulo (a: Int, b: Int) ->Int{

        if a%b<0 {

            return ((a%b)+b)


        }else{

        return a%b

        }

    }

    func getTense(tense: String) ->Int{


        if tense == "present" {
            return 0
            if i==2 || i==3 { return 1}
        }
        else if tense == "past" { return 2 }
        else if tense == "future" { return 3 }

        return 0
    }



/*   func sentenceGenerator(s: String, v: String, n: String) -> Void {

        verbLabel!.text = v

        nounLabel!.text = n

        subjectLabel.text = s


    }
*/


    @IBOutlet var subjectLabel: UILabel!

    @IBOutlet var verbLabel: UILabel!

    @IBOutlet var nounLabel: UILabel!

    @IBOutlet var sent: UILabel!


    @IBAction func futureTense(sender: AnyObject) {

        tense = "future"

        t = getTense(tense)

        verbLabel!.text = verbNoun[j][t]
        nounLabel!.text = verbNoun[j][k]
        subjectLabel!.text = subject[i]

        sentence = subject[i] + " " + verbNoun[j][t] + " " + verbNoun[j][k]


        sent!.text = sentence

    }





    @IBAction func pastTense(sender: AnyObject) {



        tense = "past"



        t = getTense(tense)

        verbLabel!.text = verbNoun[j][t]
        nounLabel!.text = verbNoun[j][k]
        subjectLabel!.text = subject[i]

        sentence = subject[i] + " " + verbNoun[j][t] + " " + verbNoun[j][k]


        sent!.text = sentence

    }





    @IBAction func subjectPrevious(sender: AnyObject) {

        i--

        i = modulo(i,b: subjectCount)

        t = getTense(tense)

        subjectLabel!.text = subject[i]
        verbLabel!.text = verbNoun[j][t]
        nounLabel!.text = verbNoun[j][k]


//        sentenceGenerator(subject[i], v: verbNoun[j][t], n: verbNoun[j][k])

      sentence = subject[i] + " " + verbNoun[j][t] + " " + verbNoun[j][k]


        sent!.text = sentence

}




    @IBAction func subjectNext(sender: AnyObject) {


        i++

         i = modulo(i,b: 6)

        t = getTense(tense)

        subjectLabel!.text = subject[i]
        verbLabel!.text = verbNoun[j][t]
        nounLabel!.text = verbNoun[j][k]

        sentence = subject[i] + " " + verbNoun[j][t] + " " + verbNoun[j][k]

        sent!.text = sentence

  }




    @IBAction func verbNext(sender: AnyObject) {


        j++

         j = modulo(j,b: verbCount)

        t = getTense(tense)


        verbLabel!.text = verbNoun[j][t]
        nounLabel!.text = verbNoun[j][k]

        sentence = subject[i] + " " + verbNoun[j][t] + " " + verbNoun[j][k]

        sent!.text = sentence

    }


    @IBAction func verbPrevious(sender: AnyObject) {

        j--

        j = modulo(j,b: verbCount)

        t = getTense(tense)


        verbLabel!.text = verbNoun[j][t]
        nounLabel!.text = verbNoun[j][k]


        sentence = subject[i] + " " + verbNoun[j][t] + " " + verbNoun[j][k]


        sent!.text = sentence

    }




    @IBAction func nounPrev(sender: AnyObject) {

        k--

        k = modulo(k,b: nounCount)+4

        t = getTense(tense)

        verbLabel!.text = verbNoun[j][t]

        nounLabel!.text = verbNoun[j][k]

        sentence = subject[i] + " " + verbNoun[j][t] + " " + verbNoun[j][k]

        sent!.text = sentence

    }


    @IBAction func nounNext(sender: AnyObject) {

        k++

        k = modulo(k,b: nounCount)+4

        t = getTense(tense)

        verbLabel!.text = verbNoun[j][t]
        nounLabel!.text = verbNoun[j][k]

        sentence = subject[i] + " " + verbNoun[j][t] + " " + verbNoun[j][k]

        sent!.text = sentence
    }


    @IBAction func splish(sender: AnyObject) {

        myUtterance = AVSpeechUtterance(string: sentence)
        myUtterance.rate = 0.4
        synth.speakUtterance(myUtterance)


    }

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


  /* override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        self.view.endEditing(true)
    }

    func textFieldshouldReturn(textField: UITextField) -> Bool{

        textField.resignFirstResponder()

        return true
    }*/
}

【问题讨论】:

  • 问题是出口动作函数有一个参数类型AnyObject。有两种方法可以解决这个问题。类型将它们转换为不同的类型,或者当您 ctrl 将线从情节提要中的元素拖放到视图控制器而不是 anyObject 时,请选择特定类型。试试看
  • 那么,我该选择 UIButton 吗?不好意思,我真的是Swift新手,前几天才开始学习。
  • @Korpel,AnyObject 有什么问题? sender 无论如何都不会被使用。我经常在代码中使用带有 AnyObject 的操作,它们工作正常。
  • @SayanSarkar,您提供了很多代码进行分析。尝试在不同的地方放置断点并找出崩溃的地方。
  • @IBOutlet var subjectLabel:UILabel! -- 这是断点发生的地方

标签: swift ios9 xcode7


【解决方案1】:

这是一个很好的例子,说明由于您不够具体而无法得到很好的答案。对于像您这样正在学习的人,这里有一些关于调试和获得良好帮助的提示。

1) 准确告诉大家问题发生在哪里。听起来您的应用程序正在以 SIGSTOP 终止,然后堆栈跟踪不会告诉您它发生在哪里。但我不确定这是不是真的,因为你只是把错误放在标题中。清楚地陈述你在身体中所知道的一切。

2) 并且不要包含您不知道相关的代码,只包含发生崩溃或与之直接相关的代码。人们总是可以要求您提供更多代码,但代码越多就越难理解您在做什么。

3) 如果您不知道崩溃发生在哪里,请在调试器中设置断点并跟踪直到错误发生,然后告诉我们该行。在这种情况下,我将从您添加的新代码开始。通常,如果您知道这条线,您就会自己发现问题,从而节省您写这篇文章的时间。

4) 如果设置断点和单步执行代码没有让您到达发生崩溃的位置,请进入调试器断点,单击视图左下角的 + 按钮(它应该是使用调试器运行时屏幕左侧)并添加“异常断点”。 Swift 无法从 Objective C 代码/库/框架中捕获异常,此断点会为您捕获它们并为您提供有关它们发生位置的更多信息。

如果您努力确定错误发生的确切位置,通常很容易自行修复它们。我知道现在帮助你已经很晚了,但希望这能帮助其他新的 Swifties,

最好的祝愿, 兰迪

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多