Swift无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】Swift无法识别的选择器发送到实例【英文标题】:Swift unrecognized selector sent to instance 【发布时间】:2015-03-13 13:55:09 【问题描述】:

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

【问题讨论】:

你能发布崩溃描述吗?你的代码中有很多不安全的展开,因此很难确定问题的根源。 输出如下:operandStack = [6.0]operandStack = [6.0, 5.0] 2015-03-14 08:56:50.334 Calculator[2640:62426] -[Calculator.ViewController operation]:无法识别的选择器发送到实例 0x7fedc161c8a0 2015-03-14 08:56:50.339 计算器 [2640:62426] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Calculator.ViewController 操作]:无法识别的选择器发送到实例 0x7fedc161c8a0' 【参考方案1】:

当我注意到我的加号、减号和除号与内部 Touch Up 中的 2 Sent Event 连接时,我解决了我的问题(查看控制器 -> appendDigit 并操作)。我从 appendDigit 断开了我的标志,它工作正常。甚至我在 sender 函数中添加了一个参数

@IBAction func enter(sender: AnyObject?) 
    userIsInTheMiddleOfTypingANumber = false
    operandStack.append(displayValue)
    println("operandStack = \(operandStack)")

我使用了这样的输入功能:输入(发件人)。 另一个问题是这行代码:

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

我被这一行改变了:

return (display.text! as NSString).doubleValue

正如我在这个讨论中看到的fatal error: unexpectedly found nil while unwrapping an Optional value - Stanford Calculator

我希望这有助于程序员检查斯坦福课程。

【讨论】:

以上是关于Swift无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

快速代码崩溃:“发送到实例的无法识别的选择器”

Swift:发送到实例的无法识别的选择器

Swift 3 NSCoder 无法识别的选择器发送到实例

Swift无法识别的选择器发送到实例

无法识别的选择器发送到实例 - Swift

Swift - 无法识别的选择器发送到 SDWebImage 方法上的实例