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)
}
}
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
Das war ein Tippfehler in meinem Code. ich habe es repariert – Amanda