当我在我的应用程序中按下按钮时,整个应用程序会冻结

时间:2017-01-06 13:33:39

标签: ios swift

我的应用有3个组件:

  1. 用户输入数字以查看数字是否为素数的文本字段
  2. 按下按钮时执行操作以确定数字是否为素数
  3. 显示该号码是否为素数的标签
  4. 按下按钮时,整个应用程序冻结(但不会崩溃),我不明白为什么。我尝试在网上搜索这个,但没有一个解决了我的问题。有什么我可以检查错误,或按钮冻结应用程序的原因。

    这是我的代码:

    import UIKit
    
    class ViewController: UIViewController {
        @IBOutlet weak var text: UITextField!
        @IBOutlet weak var label: UILabel!
    
        var i = 2
    
        @IBAction func buttonPressed(_ sender: Any) {
            if let userEnteredText = text.text{
                var isPrime = true
                let number:Int = Int(userEnteredText)!
    
                while i < number{
                    if number % i == 0{
                        isPrime = false
                        i = i + 1
                    }
    
                    if isPrime == true{
                        label.text = "\(number) is Prime"
                        label.textColor = UIColor.black
                    }else{
                        label.text = "\(number) is not Prime"
                        label.textColor = UIColor.black
                    }
                 }
            }else{
                label.text = "Error-Enter a positive integer"
                label.textColor = UIColor.red
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

因为i ++应该在if语句之外

...
        while i < number{

             i = i + 1            

             if number % i == 0 {
                isPrime = false
            }
...

请注意:由于您正在尝试计算有时可能需要的内容,因此您(在学习更多内容时)会在主线程之外执行此类计算。您的应用程序会锁定,因为您正在阻止主线程,即控制应用的UI /触摸/交互的主线程。查看dispatch_async

PPS:了解如何在XCode中指向断点并逐步进入,您将能够调试应用程序的流程。