繁体   English   中英

iOS 应用程序在手机上崩溃,但在模拟器上运行良好

[英]iOS App Crashes on Phone but works fine on simulator

我有以下代码:

var displayValue: Double{
    get{
        println("display.text =\(display.text!)")
        return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
    }
    set{
        display.text = "\(newValue)"
        userIsInTheMiddleOfTypingANumber = false;
    }
}

它在模拟器中运行良好。 但是当我在手机上尝试时它崩溃了。 这是控制台:

digit= 3
display.text =3
operandStack =[3.0]
digit= 2
display.text =2
operandStack =[3.0, 2.0]
display.text =6.0
fatal error: unexpectedly found nil while unwrapping an Optional value

这一行:

NSNumberFormatter().numberFromString(display.text!)!

正在返回 nil 导致应用程序崩溃,因为它无法解开可选项。 我真的不知道怎么了。 我正在 iTunes U 中学习一些教程。

任何帮助,将不胜感激。

尝试:

get{
    println("display.text =\(display.text!)")
    let formatter = NSNumberFormatter()
    formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
    return formatter.numberFromString(display.text!)!.doubleValue
}

因为NSNumberFormatter默认使用设备语言环境,所以小数点分隔符可能不是"." . 例如:

let formatter = NSNumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "ar-SA")
print(formatter.decimalSeparator!) // -> outputs "٫"
formatter.numberFromString("6.0") // -> nil

使用此类语言环境的格式化程序无法解析诸如"6.0"类的字符串。 因此,如果您希望格式化程序的结果一致,则应明确指定locale

至于en_US_POSIX语言环境,请参阅文档

在大多数情况下,要选择的最佳语言环境是en_US_POSIX ,这是一种专门设计用于产生美国英语结果而不管用户和系统偏好的语言环境。 en_US_POSIX在时间上也是不变的(如果美国在未来的某个时候改变了它格式化日期的方式, en_US将改变以反映新的行为,但en_US_POSIX不会),并且在平台之间( en_US_POSIX在 iPhone 上的工作方式相同OS 在 OS X 上的操作,以及在其他平台上的操作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM