由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[_.AppDelegate add:]:无法识别的选择器
Posted
技术标签:
【中文标题】由于未捕获的异常\'NSInvalidArgumentException\'而终止应用程序,原因:\'-[_.AppDelegate add:]:无法识别的选择器【英文标题】:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_.AppDelegate add:]: unrecognized selector由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[_.AppDelegate add:]:无法识别的选择器 【发布时间】:2016-08-28 23:52:42 【问题描述】:我创建了一个名为 Main.storyboard 的故事板,并创建了一个故事板 ID 为“addBtnVC”的 AddBtnViewController。在 App Delegate 中,我以编程方式初始化了一个带有三个视图控制器的选项卡栏。对于其中一个标签栏视图控制器,我创建了一个添加按钮,该按钮将以编程方式转换到 AddBtnViewController。但是,我收到了这个错误:
uncaught exception 'NSInvalidArgumentException', reason: '-[_.AppDelegate add:]: unrecognized selector sent to instance 0x7f91cb422a30'
我的代码:
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)
如何解决这个错误?
为了后代:
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)
【问题讨论】:
你还想用这个“ViewController1.navigationBar”做什么?您引用的是 ViewController1 类,而不是 ViewController1 类型的对象。了解其中的区别,这非常关键。 这是我的代码中的一个错字。我修好了 【参考方案1】:您将按钮操作的 target 设置为 self
,它代表 AppDelegate 类。
按钮操作的选择器必须与目标在同一个类中,但不是。这就是错误消息所说的。此外,选择器的签名是错误的,因为它需要一个参数。
【讨论】:
以上是关于由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[_.AppDelegate add:]:无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章
由于未捕获的异常而终止应用程序 [UIImageView _isResizable]
由于未捕获的异常“NSInternalInconsistencyException”错误而终止应用程序