斯坦福计算器应用程序不断崩溃

时间:2015-05-20 03:19:42

标签: swift

我正在斯坦福大学使用Swift在线学习斯坦福iPad和iPhone开发人员课程,并致力于创建一个计算器应用程序。 (编程还是有点新鲜。)

但是,每当我从计算器中选择一个运算符时,它都会随着错误信息而崩溃。

operandStack = [36.0] 
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb) 

然后当我查看ViewController以查看突出显示源代码的哪一部分时。就是这样:

 NSNumberFormatter().numberFromString(display.text!)!.doubleValue }

下面的错误消息,但是:

THREAD 1:EXC_BAD_INSTRUCTION(code:EXC_1386_INVOP,subcode=0x0)

我不明白发生了什么,因为我从讲座中逐字逐句地输入了代码。

感谢任何帮助!

提前致谢!

2 个答案:

答案 0 :(得分:2)

我也被困在课程的这一部分!

我认为苹果最近对NSNumberFormatter的numberFromString方法进行了修改。因为当我打印出display.text!时,没有任何错误。换句话说,在打开那部分时没有找到零。

我们要解开的另一部分就在这里,第二部分!马克,我们只拆开这部分:

NSNumberFormatter().numberFromString(display.text!)

但是我们有一个错误,所以numberFromString应该返回nil。

但在视频中,它并没有。它完美地将浮点数字符串(例如" 36.0")转换为NSNumber,然后转换为Double。

自从你的问题在5月20日被问到,我找不到任何" old"问题,我认为Apple已经改变了numberFromString上的代码。

编辑:我做了一些疯狂的事情并使用了Find&替换(命令+ F)将所有" Double" s替换为我的代码中的" Int" s。乘法部分现在运作良好,我认为问题是关于"。"关于双打的一部分。

编辑2:我解决了。美国等一些国家使用"。"分隔小数和其他一些如土耳其使用","去做吧。它适用于视频,因为他在美国这样做。

NSNumberFormatter有一个名为decimalSeparator的属性。我们必须将其设置为"。"。我做了以下更改为我的代码,它工作得很完美。

var displayValue: Double {
    get {
        var formatter = NSNumberFormatter()
        formatter.decimalSeparator = "."
        return (formatter.numberFromString(display.text!)!.doubleValue)
    }
    set {
        display.text = "\(newValue)" 
        userIsInTheMiddleOfTypingNumber = false 

    }
}

答案 1 :(得分:0)

“在展开可选项时找到nil”意味着当您使用运算符时,您有一个可能或可能没有值的变量!你说的很快“相信我,那里有一个价值”但是如果没有swift会抛出你刚看到的异常。

避免这种情况的最佳方法是在使用前进行检查:

if let value = display.text{
    //if your code get here value is safe to use
    NSNumberFormatter().numberFromString(value).doubleValue
}