![](/img/trans.png)
[英]iOS App works fine with Simulator but Crashes with a real iOS device
[英]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.