2016-08-28 1 views
0

Ich habe ein Storyboard namens Main.storyboard erstellt und einen AddBtnViewController mit der Storyboard-ID "addBtnVC" erstellt. Im App-Delegat initialisierte ich eine Tab-Leiste mit drei View-Controllern programmgesteuert. Für einen der Registerkarten für die Registerkartenansicht habe ich eine Schaltfläche zum Hinzufügen erstellt, die programmgesteuert in den AddBtnViewController übergeht. Allerdings erhielt ich diesen Fehler: Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '- [_. AppDelegate add:]: nicht erkannter Selektor

uncaught exception 'NSInvalidArgumentException', reason: '-[_.AppDelegate add:]: unrecognized selector sent to instance 0x7f91cb422a30' 

Mein 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) 
     } 
    } 
} 

Wie behebe ich diesen Fehler?

für die Nachwelt:

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) 
    } 

} 
+0

Auch was versuchst du mit dieser "ViewController1.navigationBar" zu tun? Sie referenzieren die Klasse ViewController1, kein Objekt vom Typ ViewController1. Verstehe den Unterschied, es ist sehr wichtig. – Gruntcakes

+0

Das war ein Tippfehler in meinem Code. ich habe es repariert – Amanda

Antwort

3

Sie setzen den Ziel der Button-Aktion zu self die die AppDelegate-Klasse darstellt.

Der Selektor der Schaltfläche Aktion muss in der gleichen Klasse wie das Ziel sein, aber es ist nicht. Das sagt die Fehlermeldung. Außerdem ist die Signatur des Selektors falsch, da ein Parameter benötigt wird.

Verwandte Themen