unrecognized selector sent to instance

Hi! I am super new to Xcode and I was trying to write my first project. I created two UIViewControllers and a button in the first ViewController which will bring me to the second ViewController when pressed. Here is the code

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.

    }

    @IBAction func buttonPressed(_ sender: UIButton) {

        performSegue(withIdentifier: "goToSecond", sender: nil)

    }

}

However, I kept getting this error from the AppDelegate at the @main line: Thread 1: "-[UIViewController buttonPressed:]: unrecognized selector sent to instance 0x12df0a110"

import UIKit

@main

class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // Override point for customization after application launch.

        return true

    }


    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {

        // Called when a new scene session is being created.

        // Use this method to select a configuration to create the new scene with.

        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)

    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {

        // Called when the user discards a scene session.

        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.

        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.

    }

}

If I changed @main to @UIApplicationMain, the same error will instead appear at the class AppDelegate: UIResponder, UIApplicationDelegate { line. I also tried to remove and recreate the connection, but still no luck. Any suggestions?

Answered by szymczyk in 740864022

The problem is more likely to be in the storyboard than in the code you provided.

What is the class name of the view controller in the storyboard's identity inspector? Choose View > Inspectors > Identity in Xcode to show the identity inspector.

The class name in the storyboard needs to be the name of your view controller's class, ViewController in your code example. What is most likely happening is the view controller's class is UIViewController in the storyboard. UIViewController doesn't have a buttonPressed selector, ViewController does. If you change the name of the class to ViewController, the error should go away.

Is the IBAction connected? There should be a filled-in circle next to the line of code in Xcode's editor.

If the error persists, you will have to provide more information on how you set up your storyboard for anyone to help you.

Accepted Answer

The problem is more likely to be in the storyboard than in the code you provided.

What is the class name of the view controller in the storyboard's identity inspector? Choose View > Inspectors > Identity in Xcode to show the identity inspector.

The class name in the storyboard needs to be the name of your view controller's class, ViewController in your code example. What is most likely happening is the view controller's class is UIViewController in the storyboard. UIViewController doesn't have a buttonPressed selector, ViewController does. If you change the name of the class to ViewController, the error should go away.

Is the IBAction connected? There should be a filled-in circle next to the line of code in Xcode's editor.

If the error persists, you will have to provide more information on how you set up your storyboard for anyone to help you.

unrecognized selector sent to instance
 
 
Q