iOS应用程序在手机上崩溃,但在模拟器上正常工作

我有以下代码:

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!)!

返回零导致应用程序崩溃,导致它不能解开可选。 我真的不知道什么是错的。 我正在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"这样的string。 所以如果你想要格式化程序的一致结果,你应该明确指定locale

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

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