2015-03-13 139 views
0

我正在制作一个最基本的计算器,从斯坦福在线课程中学习。我只做了一个“乘法”按钮,以便在数组“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 
      } 
     } 
    } 
+0

你可以发布崩溃描述吗?你的代码中有很多不安全的解包,因此很难找出问题的根源。 – 2015-03-13 14:04:24

+0

的输出是这样的: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

回答

0

我解决我的问题,当我发现我加号,少征和征分用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

看见我希望帮助程序员检查斯坦福大学课程。

相关问题