ios - 当我在我的应用程序中按下一个按钮时,整个应用程序卡住

标签 ios swift

我的应用有 3 个组件:

  1. 用户输入数字以查看数字是否为质数的文本字段
  2. 一个按钮,按下该按钮会执行一个操作来确定数字是否为素数
  3. 显示数字是否为质数的标签

当按下按钮时,整个应用程序卡住(但没有崩溃),我不知道为什么。我试着在网上搜索这个,但没有一个能解决我的问题。有什么我可以检查错误的东西,或者按钮卡住应用程序的原因是什么。

这是我的代码:

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

最佳答案

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

...
        while i < number{

             i = i + 1            

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

请注意:由于您正在尝试计算有时可能需要的东西,因此(当您了解更多时)您将不得不在主线程之外进行此类计算。您的应用程序锁定是因为您阻塞了主线程,而主线程是控制您应用程序的 UI/触摸/交互的线程。查看dispatch_async

PPS:了解如何在 XCode 中设置断点并单步执行/单步执行,您将能够调试应用程序的流程。

关于ios - 当我在我的应用程序中按下一个按钮时,整个应用程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41506889/

相关文章:

ios - 从 ViewController 传回数据

swift - 赋值前验证值不相等

ios - 检测插入的单元格,然后使其成为FirstResponder

ios - 创建单例并覆盖 alloc 类方法

ios - 将地址 (UITextView) 连接到 Apple map

iOS 9 应用程序本地化

ios - UIWebView支持的文件类型

ios - 更改 ios 7+ 中的导航栏按钮间距/位置

iphone - 随着表变大,Sqlite3 插入到非索引表需要更长的时间

objective-c - 如何在 Swift 中创建立即调用的函数( block )