【问题标题】:Uncaught exception of type NSExceptionNSException 类型的未捕获异常
【发布时间】:2015-11-17 07:45:36
【问题描述】:

我开始自学 Swift,我是一个真正的初学者,我正在开发一个计算器应用程序,只是作为一个入门项目。我不断收到一个线程错误,它以 NSException 类型的未捕获异常终止。我在几个地方读到这通常是由于故事板到视图控制器的连接丢失或错误造成的,但我三重检查了所有连接,我认为这不是问题。这是我的视图控制器代码,它有问题吗?我大部分时间都按照教程进行操作。

import UIKit

extension String{
    var doubleValue: Double{
        if let number = NSNumberFormatter().numberFromString(self) {
            return number.doubleValue
        }
        return 0
    }
}

class ViewController: UIViewController {

var isTypingNumber = false
var firstNumber:Double? = 0
var secondNumber:Double? = 0
var operation = ""


@IBOutlet var calculatorDisplay: UILabel!
@IBAction func numberTapped(sender: AnyObject) {
    var number = sender.currentTitle

    if isTypingNumber {
        calculatorDisplay.text = calculatorDisplay.text! + number!!
    } else{
        calculatorDisplay.text = number
        isTypingNumber = true
    }
}
@IBAction func calculationTapped(sender: AnyObject) {
    isTypingNumber = false
    firstNumber = calculatorDisplay.text!.doubleValue
    operation = sender.currentTitle!!
}
@IBAction func equalsTapped(sender: AnyObject) {
    isTypingNumber = false
    var result = 0.0
    secondNumber = calculatorDisplay.text!.doubleValue

    if operation == "+"{
        result = firstNumber! + secondNumber!
    } else if operation == "-"{
        result = firstNumber! - secondNumber!
    } else if operation == "*"{
        result = firstNumber! * secondNumber!
    }
    else if operation == "/"{
        result = firstNumber! / secondNumber!
    }

    calculatorDisplay.text = "\(result)"
}



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

非常感谢我能得到的任何帮助!

【问题讨论】:

  • 你能在 Github 上分享你的项目吗?这真的会加快速度。
  • 有什么异常?控制台中应该会打印出更多信息。
  • 请检查除以零。
  • 我刚刚将项目添加到github,我的用户名是hkoumjian,项目名称是Calculator。我对 github 也很陌生,如果有更好的方法分享,请见谅。

标签: swift calculator nsexception nsunknownkeyexception


【解决方案1】:

自从第一次将 IBOutlet 或 IBAction 安装到 Storyboard/xib 中后,您是否碰巧更改了任何 IBOutlet 或 IBAction 的名称?

尝试在 Interface Builder 中转到您的视图控制器,右键单击 VC 对象以查看所有连接的插座,并检查所有内容是否已连接并且没有任何死链接。 (即,如果您将func equalsTapped() 重命名为func equalsTapped(sender: AnyObject),则会引发异常,因为equalsTapped 不再存在,而equalsTapped: 现在存在,并且连接到第一个。)

【讨论】:

  • 并留意那些仍然连接的插座,但在右侧边缘有一个很小的白色感叹号,表示插座不再存在代码。
  • 我只是仔细检查了一下,所有的连接似乎都很好,但我只是将项目添加到 github,用户名 hkoumjian,项目是计算器,我没有看到任何小的感叹号,但我会一定要注意那些。非常感谢大家
  • 没关系!我刚刚解决了这个问题,这是一个额外的连接!太感谢了!现在我有另一个问题,但我会在我再次在这里抱怨之前自己解决这个问题,谢谢!
  • 很高兴这解决了您的问题:)。 Interface Builder 是构建过程中的一个棘手部分,因为即使您的 VC 类不再包含属性或方法,这会导致尝试调用它的代码无法编译,Interface Builder 将不可避免地允许它,因为它不会尝试实例化对象,甚至在运行时之前进行任何调用。基本上发生的情况就像您编写了代码objc_msgSend(anObject, Selector("badMethod")),它也可以正常编译,但会导致运行时异常。
猜你喜欢
  • 1970-01-01
  • 2016-03-25
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
  • 2014-07-26
相关资源
最近更新 更多