Переход от одного NSViewController к другому NSViewController

Я совершенно новичок в разработке приложений для Mac. Я столкнулся с проблемой с последних двух дней, но не смог добиться успеха. Моя проблема такая же, как вопрос Переключение между двумя разными NSViewControllers с данными .

Не могли бы вы помочь мне понять процесс и синтаксис перехода от одного NSViewController к другому.

У меня есть контроллер просмотра для входа в систему, где у меня есть два поля, то есть UserId и password. При нажатии кнопки входа вызывается веб-API для аутентификации пользователя, и после получения "SUCCESS" в качестве ответа управление должно быть передано от LoginViewController к ProfileViewController.

Я попытался решить эту проблему в соответствии с ответом на вопрос (данная ссылка), но я получаю сообщение об ошибке. «fromviewcontroller.view.superview не может быть нулевым».


person Ashutosh Shukla    schedule 22.01.2019    source источник
comment
Возможный дубликат переключения между двумя разными NSViewControllers с данными   -  person Ivan Ičin    schedule 22.01.2019
comment
Да, я упомянул ссылку в своем вопросе, но она у меня не работает.   -  person Ashutosh Shukla    schedule 22.01.2019
comment
Вопрос имеет правильный ответ, который полностью все объясняет. Вы не описали свою проблему, кроме того, что она не работает, и, возможно, вы делаете что-то не так. Но если вы не предоставите дополнительную информацию, этот вопрос должен быть закрыт ИМХО.   -  person Ivan Ičin    schedule 22.01.2019


Ответы (2)


Создайте переход от LoginViewController к ProfileViewController и дайте ему идентификатор, например «showProfile».

@IBAction func loginButton(_ sender: Any) {

    // Code for validating User.

    if response == "SUCCESS" {
        performSegue(withIdentifier: "showProfile", sender: sender)
    }
}

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)
    if segue.identifier == "showProfile" {
        let profileController = segue.destinationController as! ProfileViewController
        profileController.data = responseData
    }
}

Не используете раскадровки?

@IBAction func loginButton(_ sender: Any) {

    // Code for validating User.

    if response == "SUCCESS" {
        let profileController = ProfileViewController(nibName: "ProfileViewController", bundle: Bundle.main)
        profileController.data = responseData
        self.view.window!.contentViewController = profileController
    }

}
person Developer    schedule 22.01.2019

Вы должны создать переход в своей раскадровке (Ctrl + щелкните левой кнопкой мыши желтую круглую кнопку над вашим LoginViewController и перетащите ее в свой ProfileViewController), а затем назовите ее как-то вроде «showProfile».

Когда вы получили свой «УСПЕХ», вы хотите позвонить:

    //here you enter the name of the segue you want to call 
    //& in sender the data you want to pass to the new VC.
    performSegue(withIdentifier: "showProfile", sender: nil) 

это позвонит

    prepare(for segue: UIStoryboardSegue, sender: Any?) 

в вашем текущем ViewController, поэтому, если вы хотите передать данные в свой новый ViewController, вам нужно переопределить его.

Пример передачи данных между ViewControllers:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        //asking which segue is called
        if segue.identifier == "showProfile" {  

            //when you called "showProfile", you can be sure that your
            //destination is a ProfileViewController
            let vc = segue.destination as! ProfileViewController 

            //passing the data to your new VC
            vc.data = sender
        }
    }
person Bryan    schedule 22.01.2019
comment
Желтый кружок и UIStoryboardSegue — это iOS. Вопрос про NSViewController и macOS. - person Willeke; 22.01.2019