Xcode - 按下按钮时终止并出现 NSException 类型的未捕获异常
Xcode - Terminating with uncaught exception of type NSException when a button is pressed
我是应用程序开发的新手,我正在关注 Apple 的 tutorial 学习。我已经查看了很多关于此类错误的问题,但其中 none 对我有帮助。在本教程中,我停留在 "Add Buttons to the View" 部分,我试图实现一个字符串,当按钮处于 tapped/clicked 状态时在控制台上打印出来。只有我这样做时出错。
我在 Swift 中的按钮代码:
import UIKit
class StarRatingControl: UIView {
// MARK: Initialization
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.cyanColor()
button.addTarget(self, action: "ratingButtonTapped", forControlEvents: .TouchDown)
addSubview(button)
}
override func intrinsicContentSize() -> CGSize {
return CGSize(width: 240, height: 44)
}
// MARK: Button Action
func ratingButtonTapped(button: UIButton) {
print("Button pressed!")
}
}
错误:
2015-09-16 12:43:17.409 FoodTracker[954:13341] -[FoodTracker.StarRatingControl ratingButtonTapped]: unrecognized selector sent to instance 0x7f939b7a43b0
2015-09-16 12:43:17.443 FoodTracker[954:13341] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FoodTracker.StarRatingControl ratingButtonTapped]: unrecognized selector sent to instance 0x7f939b7a43b0'
*** First throw call stack:
(
0 CoreFoundation 0x00000001079f59b5 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x00000001095f4deb objc_exception_throw + 48
2 CoreFoundation 0x00000001079fdfdd -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010794b9fa ___forwarding___ + 970
4 CoreFoundation 0x000000010794b5a8 _CF_forwarding_prep_0 + 120
5 UIKit 0x0000000108214522 -[UIApplication sendAction:to:from:forEvent:] + 92
6 UIKit 0x0000000108373c06 -[UIControl sendAction:to:forEvent:] + 67
7 UIKit 0x0000000108373eac -[UIControl _sendActionsForEvents:withEvent:] + 273
8 UIKit 0x0000000108372b1c -[UIControl touchesBegan:withEvent:] + 261
9 UIKit 0x000000010827bf50 -[UIWindow _sendTouchesForEvent:] + 308
10 UIKit 0x000000010827cd4d -[UIWindow sendEvent:] + 865
11 UIKit 0x00000001082312ae -[UIApplication sendEvent:] + 263
12 UIKit 0x000000010820d36c _UIApplicationHandleEventQueue + 6693
13 CoreFoundation 0x0000000107921b21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
14 CoreFoundation 0x0000000107917a4c __CFRunLoopDoSources0 + 556
15 CoreFoundation 0x0000000107916f03 __CFRunLoopRun + 867
16 CoreFoundation 0x0000000107916918 CFRunLoopRunSpecific + 488
17 GraphicsServices 0x000000010befead2 GSEventRunModal + 161
18 UIKit 0x000000010821299e UIApplicationMain + 171
19 FoodTracker 0x00000001078118dd main + 109
20 libdyld.dylib 0x000000010a11392d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
我知道 Xcode 保留了我已删除的对 action/outlets 的旧引用,因此我尝试右键单击 Interface Builder 中的 View Controller 以查找旁边带有感叹号的项目他们,但我找不到任何东西(到目前为止我只知道故障排除方法)。我正在使用 Xcode beta 7.0。感谢您的帮助!
您在选择器中遗漏了 ":"
,请尝试以下操作:
button.addTarget(self, action: "ratingButtonTapped:", forControlEvents: .TouchDown)
希望对你有所帮助。
我遇到了同样的问题,
检查 Xcode 的版本。
#selector自带Xcode 7.3
如果您有旧版本更新,这可能会修复您的错误。
此致,
德里斯
如果您使用的是 Swift 3,则必须将相关行更改为:
button.addTarget(self, action: #selector(StarRatingControl.ratingButtonTapped), for: .touchDown)
作为参考,我决定查看样本并遇到类似问题。
我正在使用 XCode 8 + Swift 3,这些是我为使其正常工作所做的更改:
button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped), for: .touchDown)
注:考虑文件名"RatingControl.swift".
希望对你有所帮助=D
我是应用程序开发的新手,我正在关注 Apple 的 tutorial 学习。我已经查看了很多关于此类错误的问题,但其中 none 对我有帮助。在本教程中,我停留在 "Add Buttons to the View" 部分,我试图实现一个字符串,当按钮处于 tapped/clicked 状态时在控制台上打印出来。只有我这样做时出错。
我在 Swift 中的按钮代码:
import UIKit
class StarRatingControl: UIView {
// MARK: Initialization
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.cyanColor()
button.addTarget(self, action: "ratingButtonTapped", forControlEvents: .TouchDown)
addSubview(button)
}
override func intrinsicContentSize() -> CGSize {
return CGSize(width: 240, height: 44)
}
// MARK: Button Action
func ratingButtonTapped(button: UIButton) {
print("Button pressed!")
}
}
错误:
2015-09-16 12:43:17.409 FoodTracker[954:13341] -[FoodTracker.StarRatingControl ratingButtonTapped]: unrecognized selector sent to instance 0x7f939b7a43b0
2015-09-16 12:43:17.443 FoodTracker[954:13341] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FoodTracker.StarRatingControl ratingButtonTapped]: unrecognized selector sent to instance 0x7f939b7a43b0'
*** First throw call stack:
(
0 CoreFoundation 0x00000001079f59b5 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x00000001095f4deb objc_exception_throw + 48
2 CoreFoundation 0x00000001079fdfdd -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010794b9fa ___forwarding___ + 970
4 CoreFoundation 0x000000010794b5a8 _CF_forwarding_prep_0 + 120
5 UIKit 0x0000000108214522 -[UIApplication sendAction:to:from:forEvent:] + 92
6 UIKit 0x0000000108373c06 -[UIControl sendAction:to:forEvent:] + 67
7 UIKit 0x0000000108373eac -[UIControl _sendActionsForEvents:withEvent:] + 273
8 UIKit 0x0000000108372b1c -[UIControl touchesBegan:withEvent:] + 261
9 UIKit 0x000000010827bf50 -[UIWindow _sendTouchesForEvent:] + 308
10 UIKit 0x000000010827cd4d -[UIWindow sendEvent:] + 865
11 UIKit 0x00000001082312ae -[UIApplication sendEvent:] + 263
12 UIKit 0x000000010820d36c _UIApplicationHandleEventQueue + 6693
13 CoreFoundation 0x0000000107921b21 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
14 CoreFoundation 0x0000000107917a4c __CFRunLoopDoSources0 + 556
15 CoreFoundation 0x0000000107916f03 __CFRunLoopRun + 867
16 CoreFoundation 0x0000000107916918 CFRunLoopRunSpecific + 488
17 GraphicsServices 0x000000010befead2 GSEventRunModal + 161
18 UIKit 0x000000010821299e UIApplicationMain + 171
19 FoodTracker 0x00000001078118dd main + 109
20 libdyld.dylib 0x000000010a11392d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
我知道 Xcode 保留了我已删除的对 action/outlets 的旧引用,因此我尝试右键单击 Interface Builder 中的 View Controller 以查找旁边带有感叹号的项目他们,但我找不到任何东西(到目前为止我只知道故障排除方法)。我正在使用 Xcode beta 7.0。感谢您的帮助!
您在选择器中遗漏了 ":"
,请尝试以下操作:
button.addTarget(self, action: "ratingButtonTapped:", forControlEvents: .TouchDown)
希望对你有所帮助。
我遇到了同样的问题, 检查 Xcode 的版本。
#selector自带Xcode 7.3
如果您有旧版本更新,这可能会修复您的错误。
此致, 德里斯
如果您使用的是 Swift 3,则必须将相关行更改为:
button.addTarget(self, action: #selector(StarRatingControl.ratingButtonTapped), for: .touchDown)
作为参考,我决定查看样本并遇到类似问题。
我正在使用 XCode 8 + Swift 3,这些是我为使其正常工作所做的更改:
button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped), for: .touchDown)
注:考虑文件名"RatingControl.swift".
希望对你有所帮助=D