【问题标题】:Math app with decimal pad crashing带有小数点的数学应用程序崩溃
【发布时间】:2016-02-16 18:03:55
【问题描述】:

嗨,我正在尝试使用方程式制作一个数学应用程序,我已经学会了如何获得十进制键盘,但是当我使用它时,它会崩溃并显示有关线程一的消息:

在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点,以便在调试器中捕获它。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能会有所帮助。

2016-02-16 21:13:31.682 Formel bok[586:43971] 找不到支持键盘 iPhone-PortraitChoco-DecimalPad 的 type 8 的键盘;使用 1022227301_PortraitChoco_iPhone-Simple-Pad_Default

2016-02-16 21:13:34.606 Formel bok[586:43971] 找不到支持 iPhone-PortraitChoco-DecimalPad 键盘类型 8 的键盘;使用 1022227301_PortraitChoco_iPhone-Simple-Pad_Default

致命错误:在展开可选值时意外发现 nil (lldb) "

还有:

“线程 1:EXC_BREAKPOIN(code=1,subcode=0x0002a476c)

我相信它这样做是因为它是 a ,而不是 a 。点。我尝试将我的手机设置为美国地区然后我工作是否有其他解决方案可以使用此代码,我非常感谢收到的任何帮助。

import UIKit

class CylinderViewController: UIViewController {
    @IBOutlet weak var radien: UITextField!
    @IBOutlet weak var höjden: UITextField!
    @IBOutlet weak var svar: UILabel!
    @IBOutlet weak var svar2: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        radien.keyboardType = UIKeyboardType.DecimalPad
        höjden.keyboardType = UIKeyboardType.DecimalPad
       
        
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
        view.addGestureRecognizer(tap)          // Do any additional setup after loading the view.
    }

   
    
    func dismissKeyboard() {
        //Causes the view (or one of its embedded text fields) to resign the first responder status.
        view.endEditing(true)
        
        
        
        if höjden.text == ""{
        }
        else{
        
        let atext: Double? = Double(radien.text!)    // conversion of string to Int
        let btext: Double? = Double(höjden.text!)
       
        
        let myInt = atext! * atext!
       
        
        
        let result = Double(myInt * btext!) * M_PI
        svar.text = "\(result)"
        
        
        let pi = M_PI * 2
        
        let result2 = Float(pi) * Float(atext!) * Float(btext!)
        svar2.text = "\(result2)"
        
        
        
        
        }
        
    }
    
    
    
    
    
    
    
    
    

【问题讨论】:

  • 请告诉我们您遇到的确切错误
  • 嗨,现在我已添加到错误消息@KyleRedfearn
  • 转到iOS模拟器->硬件->键盘->取消选中连接硬件键盘选项。这将解决问题。
  • 如果我使用您的代码并且作为美国,我确认它有效。如果我更改为瑞典,我会得到 atext 和 btext 的 nil 值。
  • 对我来说也一样,在 iOS 模拟器上它可以工作,但我不知道如何让它在 iPhone @MwcsMac 上工作

标签: xcode swift math keyboard decimal


【解决方案1】:

这是您用于本地化的代码。我在美国和瑞典都试过了,零问题已经消失了。

注意:您还需要对输出进行数字格式设置,但这应该对您有所帮助。

import UIKit

class CylinderViewController: UIViewController {
     @IBOutlet weak var radien: UITextField!
     @IBOutlet weak var höjden: UITextField!
     @IBOutlet weak var svar: UILabel!
     @IBOutlet weak var svar2: UILabel!

  override func viewDidLoad() {
      super.viewDidLoad()
      radien.keyboardType = UIKeyboardType.DecimalPad
      höjden.keyboardType = UIKeyboardType.DecimalPad


    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
    view.addGestureRecognizer(tap)          // Do any additional setup after loading the view.
  }

   func dismissKeyboard() {
       //Causes the view (or one of its embedded text fields) to resign the first responder status.
     view.endEditing(true)

    if höjden.text == ""{
    }
    else{

        let nf = NSNumberFormatter() // added to use localization
        let atext = nf.numberFromString(radien.text!) //added
        let btext = nf.numberFromString(höjden.text!) //added
       //let atext: Double? = Double(radien.text!)    // conversion of string to Int
       //let btext: Double? = Double(höjden.text!)

        let myInt = Double(atext!) * Double(atext!)

        let result = Double(myInt * Double(btext!)) * M_PI
        svar.text = "\(result)"

        let pi = M_PI * 2

        let result2 = Float(pi) * Float(atext!) * Float(btext!)
        svar2.text = "\(result2)"

    }

 }

}

【讨论】:

  • 感谢 @MwcsMac 的帮助,此解决方案立即生效
【解决方案2】:

所以您遇到了几个错误。让我们从导致您崩溃的原因开始:

在展开可选值 (lldb) 时意外发现 nil

您收到此错误是因为您强制解包 nil 值。 Swift 使用if let 语句有一个很好的方法来防止这种情况发生。从字符串创建小数时尝试这样做:

if let double: Double? = Double(radien.text) {
    // Use double here
} else {
    // Error handling here
}

如果 Swift 可以成功解析您的字符串,您将输入 if 语句,并且可以安全地使用 double 变量。如果 Swift 不能成功地将你的字符串解析成Double,那可能是因为你的字符串中有一个无效字符,你需要显示错误信息什么的

【讨论】:

  • 感谢您的时间和精力,您的解决方案得到了极大的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 2014-10-28
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多