"Unrecognized selector geschickt Instanz" Fehler beim drücken UIButton in Xcode 8/Swift 3
Mache ich eine app, die erfordert, dass ein Benutzer durch drücken einer von zwei UIButtons
und druckt anschließend eine Antwort-je nachdem, welcher button gedrückt wurde (ermittelt auf der Grundlage der tag der Taste gedrückt). Allerdings, wenn ich auf die Taste drücken, bekomme ich ein
Unrecognized selector geschickt Instanz
Wie kann ich dies beheben?
Hier ist mein code. Die IBAction
unten bezieht sich auf die UIButtons
, die den Fehler verursacht:
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
}
}
}
Hier ist die Gesamtheit der Fehler:
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)
- Die Fehlermeldung zeigt
buttonOnePressed:
, aber der swift-code wird nicht eine Methode namensbuttonOnePressed:
. Möglicherweise müssen Sie wieder die Taste Aktion, umbuttonPressed:
oder benennen Sie IhrebuttonPressed(_:)
zubuttonOnePressed(_:)
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, wie Sie haben, benennen Sie Ihre
IBAction
Methode name früher war es anders und es ist verbunden mit dem vorherigen Namen in das storyboard. So einfach trennen Sie Ihre action-Methode und schließen Sie es entsprechend.