编辑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)
答案 0 :(得分:4)
告诉问题是-[Test_App.ViewController numberOfSounds:]
中存在冒号。这意味着您有一些尝试使用一个参数调用名为numberOfSounds:
的方法。
假设您的代码中没有任何内容可以执行此操作,我会仔细检查“Connections Inspector”IB中滑块的插座/操作,并确保您没有像下面这样的操作:
这会导致您描述的错误消息。如果您有上述任何无关的操作,只需点击“x”即可删除它们。
-
如果您曾尝试将某个操作从滑块连接到视图控制器,调用操作numberOfSounds
,但是在看到IBAction
代码后意识到错误并继续删除/编辑代码中的IBAction
函数,但忽略调整IB中的连接。这是导致这种行为的常见工作流程。