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上做的一样,就像在其他平台上一样)。