Не удается открыть TableViewController

#ios #swift5

#iOS #swift5

Вопрос:

Работая над некоторым проектом IOS (Swift5), который включает в себя функции входа в систему, я столкнулся со странной проблемой, которая заключается в открытии по нажатию кнопки нового UITableViewController, который включает в себя некоторые записи из базы данных. Странно, потому что эта же функциональность работает без каких-либо проблем с точки зрения входа в систему и не работает с точки зрения после входа пользователя в систему.

Это метод, который открывает новый контроллер:

  @IBAction func didTapButton(sender: Any) {
    
   // let story : UIStoryboard = UIStoryboard(name: "Main",        
   bundle:nil)
    
    let categories = CategoriesTableViewController()
    navigationController?.pushViewController(categories, 
    animated: true)
    

    //        let controller =  
    story.instantiateViewController(identifier: 
    "CategoriesTableViewController") as! 
    CategoriesTableViewController
    //
    //        present(controller, animated: true)
    
    }
  

И это ошибка, которая возникает, когда я запускаю этот описанный выше метод по щелчку, как только я войду в это приложение:

 Exception   NSException *   "-  
[project7_4_adm.ViewController       
didTapButtonWithSender:]: unrecognized selector sent 
to instance 0x7f9889222260" 0x0000600001d35860
  

Я нашел в Google какое-то решение, которое заключается в добавлении цели к кнопке, что я и сделал:

    btn.addTarget(self, action: 
   #selector(didTapButton(sender:)), for: 
   .touchUpInside)
  

но, несмотря на то, что я это сделал, я получил сообщение об ошибке:

     Thread 1: "-
    [project7_4_adm.CategoriesTableViewController  
    initWithIdentifier:source:destination:]: unrecognized 
    selector sent to instance 0x7fac3a11df90"
  

Могу ли я попросить вас написать мне, что может быть причиной этой проблемы?

Спасибо

Комментарии:

1. Ваш целевой селектор определяется как имеющий один параметр (отправитель). В вашей реализации его нет.

2. @ Phillip Mills у него есть параметр, только что отредактированный и добавленный.

Ответ №1:

Причина исключения четко указывает, что didTapButton(sender... переводится в Objective-C как didTapButtonWithSender:

В an IBAction вам нужно вставить символ подчеркивания

 @IBAction func didTapButton(_ sender: Any) 
  

и селектор может быть просто

 #selector(didTapButton)
  

Комментарии:

1. этот метод включает в себя этот параметр, я обновил выше.

2. IBAction Необходимо включить параметр, а символ подчеркивания скрывает только имя внешнего параметра.

3. у него есть параметр и подчеркивание, и я все еще получаю ошибку

4. В построителе интерфейса повторно подключите действие.