Résiliation d'application en raison de uncaught exception 'NSInvalidArgumentException', la raison: '-[_.AppDelegate ajouter:]: unrecognized sélecteur
J'ai créé un scénario appelé main.storyboard et créé un AddBtnViewController avec storyboard ID "addBtnVC". Le Délégué d'Application, j'ai initialisé un onglet de la barre avec trois contrôleurs de vue de la programmation. Pour l'un de barre d'onglet vue des contrôleurs, j'ai créé un bouton ajouter qui seraient de passage à l'AddBtnViewController par programmation. Cependant, j'ai reçu ce message d'erreur:
uncaught exception 'NSInvalidArgumentException', reason: '-[_.AppDelegate add:]: unrecognized selector sent to instance 0x7f91cb422a30'
Mon code:
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//Make add btn for View Controller 1 of Navigation Bar
let addBtn = UIButton(frame: CGRectMake(0, 0, 30, 30))
addBtn.addTarget(self, action: #selector(ViewController1.add), forControlEvents: .TouchUpInside)
let rightBarButton = UIBarButtonItem()
rightBarButton.customView = addBtn
NavController.navigationBar.topItem?.rightBarButtonItem = rightBarButton
return true
}
}
class ViewController1: UIViewController {
let addBtnVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("addBtnVC")
func add(sender: UIButton!) {
if let addBtnVC = storyboard!.instantiateViewControllerWithIdentifier("addBtnVC") as? AddBtnViewController {
presentViewController(addBtnVC, animated: true, completion: nil)
}
}
}
Comment puis-je corriger cette erreur?
Pour la postérité:
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let VC1 = UIViewController()
//Make add btn for View Controller 1 of Navigation Bar
let addBtn = UIButton(frame: CGRectMake(0, 0, 30, 30))
addBtn.addTarget(VC1, action: #selector(VC1.add(_:)), forControlEvents: .TouchUpInside)
let rightBarButton = UIBarButtonItem()
rightBarButton.customView = addBtn
NavController.navigationBar.topItem?.rightBarButtonItem = rightBarButton
return true
}
}
class ViewController1: UIViewController {
let addBtnVC:AddButtonViewController = AddButtonViewController()
func add(sender: UIButton!) {
let navController = UINavigationController(rootViewController: addBtnVC)
navController.navigationBar.tintColor = colorPalette.red
self.presentViewController(navController, animated: true, completion: nil)
}
}
- Aussi ce que vous essayez de faire avec ce "ViewController1.navigationBar"? Vous faites référence à la classe ViewController1, pas un objet de type ViewController1. Comprendre la différence, il est très crucial.
- C'était une faute de frappe dans mon code. Je l'ai corrigé
Vous devez vous connecter pour publier un commentaire.
Vous définissez la cible du bouton d'action à
self
qui représente l'AppDelegate classe.La sélecteur de de l'action du bouton doit être dans la même classe que la cible, mais il ne l'est pas. C'est ce que le message d'erreur dit. En outre, la signature de le sélecteur est mauvaise parce qu'elle prend un paramètre.