Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS应用程序在手机上崩溃,但在模拟器上运行良好_Ios_Xcode_Swift - Fatal编程技术网

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
不是线程安全的。哇,谢谢。多么微妙的错误…只发生在其他人的设备上,无法复制等等。