另一个"无法识别的选择器发送到实例"

时间:2015-10-17 20:42:29

标签: ios swift

  

编辑3:

     

对于其他人收到此错误,这就是这里发生的事情。

     

我最初创建滑块的IBAction为" numberOfSounds"。   然后我创建了一个名为" numberOfSounds"的类属性。并重命名   IBAction to" sliderValueChanged"。

     

我希望连接能够自动更新连接,但是   它没有做到。所以,因为我笨拙地使用相同的名称作为变量,我   错过了连接。请参阅下面的@rob接受的答案   线索。

     

解决方案是删除先前的连接并从storyboard中的滑块拖动到ViewController中的sliderValueChanged IBAction。

原始问题:

我得到了这个非常常见的错误,就像其他许多错误一样,我很难理解修复。操纵滑块会导致崩溃,即此消息:

  

2015-10-17 13:35:59.765 Test App [25969:2985698] ***终止应用   由于未被捕获的异常' NSInvalidArgumentException',原因:   ' - [Test_App.ViewController numberOfSounds:]:无法识别的选择器   发送到实例0x7fc439e26740'

断点打开" numberOfSounds = Int(sender.value)"。

import UIKit
import AVFoundation

class ViewController: UIViewController {
  var numberOfSounds: Int = 0

  @IBAction func sliderValueChanged(sender: UISlider) {
    numberOfSounds = Int(sender.value)
  }
}

我想我已经理解了这个问题,尽管numberOfSounds是ViewController的一个属性,但它在sliderValueChanged的范围内不可用。

我已经通过排名前15-20的Google搜索了#34;无法识别的选择器发送到实例"但仍然没有找到似乎可以解决问题的东西。

感谢您的帮助。

编辑:(添加更多代码)

class ViewController: UIViewController {
  var numberOfSounds: Int = 0

  @IBAction func sliderValueChanged(sender: UISlider) {
    numberOfSounds = Int(sender.value)
  }
  @IBOutlet weak var numberOfSoundsLabel: UILabel!
  @IBAction func PlaySound(sender: UIButton) {}

  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
  }

  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.
  }
}

编辑2 :(添加完整堆栈跟踪)

  

2015-10-17 13:59:24.303测试应用[26230:3006546]    - [Test_App.ViewController numberOfSounds:]:无法识别的选择器发送到实例0x7fedea730350 2015-10-17 13:59:24.313测试   应用[26230:3006546] *因未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:' - [Test_App.ViewController   numberOfSounds:]:发送到实例的无法识别的选择器   0x7fedea730350'   * 第一次抛出调用堆栈:(0 CoreFoundation 0x000000010a7d7f65 exceptionPreprocess + 165 1 libobjc.A.dylib
  0x000000010c469deb objc_exception_throw + 48 2 CoreFoundation
  0x000000010a7e058d - [NSObject(NSObject)doesNotRecognizeSelector:] +   205 3 CoreFoundation 0x000000010a72df7a   ___ forwarding _
+ 970 4 CoreFoundation 0x000000010a72db28 _CF_forwarding_prep_0 + 120 5 UIKit
  0x000000010aff41fa - [UIApplication sendAction:to:from:forEvent:] + 92     6 UIKit 0x000000010b158504    - [UIControl sendAction:to:forEvent:] + 67 7 UIKit 0x000000010b1587d0 - [UIControl _sendActionsForEvents:withEvent:] + 311     8 UIKit 0x000000010b244770 - [UISlider   beginTrackingWithTouch:withEvent:] + 1083 9 UIKit
  0x000000010b15739d - [UIControl touchesBegan:withEvent:] + 136 10   UIKit 0x000000010b05e894 - [UIWindow   _sendTouchesForEvent:] + 308 11 UIKit 0x000000010b05f691 - [UIWindow sendEvent:] + 865 12 UIKit
  0x000000010b011752 - [UIApplication sendEvent:] + 263 13 UIKit
  0x000000010afecfcc _UIApplicationHandleEventQueue + 6693 14   CoreFoundation 0x000000010a7040a1    CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 15 CoreFoundation 0x000000010a6f9fcc   __CFRunLoopDoSources0 + 556 16 CoreFoundation 0x000000010a6f9483 __CFRunLoopRun + 867 17 CoreFoundation
  0x000000010a6f8e98 CFRunLoopRunSpecific + 488 18 GraphicsServices
  0x000000010ed6cad2 GSEventRunModal + 161 19 UIKit
  0x000000010aff2676 UIApplicationMain + 171 20测试应用程序
  0x000000010a5fc1ad main + 109 21 libdyld.dylib
  0x000000010cfb092d start + 1 22 ???   0x0000000000000001 0x0 + 1)

1 个答案:

答案 0 :(得分:4)

告诉问题是-[Test_App.ViewController numberOfSounds:]中存在冒号。这意味着您有一些尝试使用一个参数调用名为numberOfSounds:的方法。

假设您的代码中没有任何内容可以执行此操作,我会仔细检查“Connections Inspector”IB中滑块的插座/操作,并确保您没有像下面这样的操作:

enter image description here

这会导致您描述的错误消息。如果您有上述任何无关的操作,只需点击“x”即可删除它们。

-

如果您曾尝试将某个操作从滑块连接到视图控制器,调用操作numberOfSounds,但是在看到IBAction代码后意识到错误并继续删除/编辑代码中的IBAction函数,但忽略调整IB中的连接。这是导致这种行为的常见工作流程。