1
我正在製作一個應用程序,要求用戶按下兩個UIButtons
中的一個,然後根據按下哪個按鈕來打印響應(根據按下按鈕的標籤)。然而,當我運行按鈕,我得到一個在Xcode 8中按下UIButton時出現「無法識別的選擇器發送到實例」錯誤
Unrecognized selector sent to instance
我該如何解決?
這是我的代碼。該IBAction
底部指UIButtons
所造成的錯誤:
import UIKit
class ViewController: UIViewController {
let story1 = "This is the story."
let answer1 = "No change"
let answer2 = "Lose 1 health"
var healthStat : Int = 10
@IBOutlet weak var storyText: UILabel!
@IBOutlet weak var health: UILabel!
@IBOutlet weak var restartButton: UILabel!
@IBOutlet weak var choiceOne: UIButton!
@IBOutlet weak var choiceTwo: UIButton!
var storyIndex = 1
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
storyText.text = story1
choiceOne.setTitle("\(answer1)", for: .normal)
choiceTwo.setTitle("\(answer2)", for: .normal)
health.text = String("Health: \(healthStat)")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func buttonPressed(_ sender: UIButton) {
if sender.tag == 1 {
print("Option 1 selected")
}
else if sender.tag == 2 {
print("Option 2 selected. Lose 1 health.")
healthStat = healthStat - 1
}
}
}
以下是錯誤的全部:
2017-07-29 21:45:24.626 Choose Your Own Adventure[16001:694686] -[Choose_Your_Own_Adventure.ViewController buttonOnePressed:]: unrecognized selector sent to instance 0x7fc199c0cfe0
2017-07-29 21:45:24.638 Choose Your Own Adventure[16001:694686] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Choose_Your_Own_Adventure.ViewController buttonOnePressed:]: unrecognized selector sent to instance 0x7fc199c0cfe0'
*** First throw call stack:
(
0 CoreFoundation 0x0000000113504b0b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000011037e141 objc_exception_throw + 48
2 CoreFoundation 0x0000000113574134 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x000000011348b840 ___forwarding___ + 1024
4 CoreFoundation 0x000000011348b3b8 _CF_forwarding_prep_0 + 120
5 UIKit 0x0000000110c66d82 -[UIApplication sendAction:to:from:forEvent:] + 83
6 UIKit 0x0000000110deb5ac -[UIControl sendAction:to:forEvent:] + 67
7 UIKit 0x0000000110deb8c7 -[UIControl _sendActionsForEvents:withEvent:] + 450
8 UIKit 0x0000000110dea802 -[UIControl touchesEnded:withEvent:] + 618
9 UIKit 0x0000000110cd47ea -[UIWindow _sendTouchesForEvent:] + 2707
10 UIKit 0x0000000110cd5f00 -[UIWindow sendEvent:] + 4114
11 UIKit 0x0000000110c82a84 -[UIApplication sendEvent:] + 352
12 UIKit 0x00000001114665d4 __dispatchPreprocessedEventFromEventQueue + 2926
13 UIKit 0x000000011145e532 __handleEventQueue + 1122
14 CoreFoundation 0x00000001134aac01 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
15 CoreFoundation 0x00000001134900cf __CFRunLoopDoSources0 + 527
16 CoreFoundation 0x000000011348f5ff __CFRunLoopRun + 911
17 CoreFoundation 0x000000011348f016 CFRunLoopRunSpecific + 406
18 GraphicsServices 0x000000011542da24 GSEventRunModal + 62
19 UIKit 0x0000000110c65134 UIApplicationMain + 159
20 Choose Your Own Adventure 0x000000010fd9efa7 main + 55
21 libdyld.dylib 0x00000001144a465d start + 1
22 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
錯誤消息顯示'buttonOnePressed:',但您的swift代碼沒有名爲'buttonOnePressed:'的方法。您可能需要將按鈕動作重新連接到'buttonPressed:'或將'buttonPressed(_ :)'重命名爲'buttonOnePressed(_ :)'。 – OOPer