当前位置: 首页 > 面试题库 >

iOS App在手机上崩溃,但在模拟器上可以正常运行

艾望
2023-03-14
问题内容

我有以下代码:

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上相同)在OS X和其他平台上一样)。



 类似资料:
  • 我想在地图上画一条折线 进口com.google.android.gms.maps.model.Polyline;进口com.google.android.gms.maps.model.PolylineOptions; 导入java.util。ArrayList;导入java.util.List; 公共类 MainActivity extends AppCompatActivity 实现了 OnM

  • 第一个屏幕上传权和工作正常(Toast和所有其他设置和参数),直到我尝试保存结果并通过相同的按钮打开新屏幕。按下按钮会使我手机中的应用程序崩溃,而不会打开第二个屏幕。然而,在模拟器中,一切正常。 这是主要的活动: 这是相关的XML: 这是第二个活动: 这是第二个XML: 这是日志猫错误: 致命异常:主< br >进程:com . example . rach mani . mythematix _

  • 编辑3:添加包含错误的代码的一部分 编辑4:更多代码。下面是onCreate()方法。对checkForNewBooking()方法的调用来自于此。

  • 几周前我开始使用Android Studio。我在一个具有正常登录屏幕的应用程序上工作过,在模拟器上一切正常。但如果我尝试在我的三星Galaxy S7 Edge(Android 7.0)上运行该应用程序,该应用程序会立即崩溃。 我已经用API 23模拟了Nexus 5,当我用API 24模拟的Pixel尝试时,模拟器也会崩溃。所以我想问题取决于Android版本? Logcat(我把我正在使用的所

  • 在我的应用程序中,对于特定的< code>EditText,我希望句子的第一个字母是大写字母。所以我用了< code > Android:input type = " textCapSentences " 。 奇怪的是这适用于模拟器,但不适用于模拟器。我什至尝试了,即使它已被弃用,但它不起作用。 相关事实: > 模拟器操作系统:4.0.3 真实设备操作系统:4.0.4 应用minSdk版本:2.3

  • 我正在为我的Android应用程序使用Firebase身份验证和数据库。所有的一切都可以在一个仿真器上运行(Nexus 5X API 26、Nexus 6 API 26、Galaxy Nexus API 24)。当我在我的个人Galaxy S6 Edge API 24上启动应用程序时,我的Firebase相关项目都没有工作。 没有崩溃错误。 很抱歉写了这么长的日志,我似乎弄不明白问题所在。请让我知