iOS应用程序在手机上崩溃,但在模拟器上运行良好
我有以下代码:iOS应用程序在手机上崩溃,但在模拟器上运行良好,ios,xcode,swift,Ios,Xcode,Swift,我有以下代码: var displayValue: Double{ get{ println("display.text =\(display.text!)") return NSNumberFormatter().numberFromString(display.text!)!.doubleValue } set{ display.text = "\(newValue)" userIsInTheMiddle
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,这导致应用程序崩溃,因为它无法打开可选应用程序。我真的不知道怎么了。我正在关注iTunesU的一些教程
任何帮助都将不胜感激。请尝试:
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”
这样的字符串。因此,如果希望格式化程序的结果一致,则应明确指定区域设置
关于en_US\u POSIX
locale,请参见:
在大多数情况下,最好选择的语言环境是en_US_POSIX
,该语言环境专门设计用于产生美国英语结果,而不管用户和系统偏好如何en_US_POSIX
在时间上也是不变的(如果美国在未来的某个时候改变日期格式,en_US
将改变以反映新的行为,但en_US_POSIX
不会),并且在平台之间(en_US_POSIX
在iPhone操作系统上的工作原理与在OS X上的工作原理相同,也与在其他平台上的工作原理相同)
可能是因为display.text等于nil。这就是为什么它会变得混乱。@AshrafTawfeeq它没有返回我打印的nil,它的值是6.0。这正是问题所在。无论如何,有更好的解决方案吗?是否一次性设置区域设置?也许,您可能希望创建一个单例类,或者一个保存缓存格式化程序的全局常量。但是,您应该知道,
NSNumberFormatter
不是线程安全的。哇,谢谢。多么微妙的错误…只发生在其他人的设备上,无法复制等等。