发送到实例的快速无法识别的选择器
问题描述:
我正在制作一个最基本的计算器,从斯坦福在线课程中学习。我只做了一个“乘法”按钮,以便在数组“operandStack”中乘以两个值,但是每次程序崩溃时,我都不知道为什么。发送到实例的快速无法识别的选择器
import UIKit
class ViewController: UIViewController
{
@IBOutlet weak var display: UILabel!
var userIsInTheMiddleOfTypingANumber:Bool = false
@IBAction func appendDigit(sender: UIButton) {
let digit = sender.currentTitle!
if userIsInTheMiddleOfTypingANumber {
display.text = display.text! + digit
} else {
display.text = digit
userIsInTheMiddleOfTypingANumber = true
}
}
@IBAction func operate(sender: UIButton) {
let operation = sender.currentTitle!
if userIsInTheMiddleOfTypingANumber {
enter()
}
switch operation {
case "×":
if operandStack.count >= 2 {
displayValue = operandStack.removeLast() * operandStack.removeLast()
enter()
}
default: break
}
}
var operandStack = Array<Double>()
@IBAction func enter() {
userIsInTheMiddleOfTypingANumber = false
operandStack.append(displayValue)
println("operandStack = \(operandStack)")
}
var displayValue: Double {
get {
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
}
set {
display.text = "\(newValue)"
userIsInTheMiddleOfTypingANumber = false
}
}
}
答
我解决我的问题,当我发现我加号,少征和征分用2发送的事件最多的内部连接触摸(视图 - 控制器 - > appendDigit和操作)。我从appendDigit断开了我的标志,它工作正常。即使我在发件人函数中添加了一个参数
@IBAction func enter(sender: AnyObject?) {
userIsInTheMiddleOfTypingANumber = false
operandStack.append(displayValue)
println("operandStack = \(operandStack)")
}
我使用了如下输入函数:enter(sender)。 另一个问题是这行代码:
return NSNumberFormatter().numberFromString(display.text!)!.doubleValue
我改变了这一行:
return (display.text! as NSString).doubleValue
,因为我在这个disscusion fatal error: unexpectedly found nil while unwrapping an Optional value - Standford Calculator
看见我希望帮助程序员检查斯坦福大学课程。
你可以发布崩溃描述吗?你的代码中有很多不安全的解包,因此很难找出问题的根源。 – 2015-03-13 14:04:24
的输出是这样的:operandStack = [6.0] operandStack = [6.0,5.0] 2015-03-14 08:56:50.334计算器[2640:62426] - [Calculator.ViewController操作]:无法识别的选择器发送到实例0x7fedc161c8a0 2015-03-14 08:56:50.339计算器[2640:62426] ***由于未捕获的异常'NSInvalidArgumentException',原因:' - [Calculator.ViewController操作]:无法识别的选择器发送到实例0x7fedc161c8a0' – 2015-03-13 21:58:52