перейти / нажать на другой контроллер представления из функции IBAction? - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь программно перейти к следующему контроллеру представления, чтобы я мог сохранить данные в основных данных и затем перейти к следующему контроллеру представления.В основном, когда я нажимаю кнопку с IBAction, он будет делать все это.Однако я получаю ошибку SIGABRT потока 1 всякий раз, когда я использую этот код в своей функции IBAction:

    @IBAction func onPlusTapped(){

        let alert = UIAlertController(title: "New Course", message: nil, preferredStyle: .alert)

        alert.addTextField { (textField) in
            textField.placeholder = "Course"
        }
        let action = UIAlertAction(title: "New", style: .default){ (_) in
            let course = alert.textFields!.first?.text!
            print(course)

            let coursy = Course(context: PersistenceService.context)
            coursy.name = course
            PersistenceService.saveContext()
        }
        alert.addAction(action)
        present(alert, animated: true, completion: nil)

        // jump to next view controller
        segway()

    }

    func segway(){
    let storyBoard: UIStoryboard = UIStoryboard(name: "viewcontroller", bundle: nil)
    let balanceViewController = storyBoard.instantiateViewController(withIdentifier: "viewcontroller") as! ViewController
    self.present(balanceViewController, animated: true, completion: nil)
    }

}

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Почему вы прыгаете на segway () и одновременно видите предупреждение?Вы не должны помещать segway () в свое действие оповещения

Пожалуйста, смотрите следующий код.

@IBAction func onPlusTapped() {

        let alert = UIAlertController(title: "New Course", message: nil, preferredStyle: .alert)

        alert.addTextField { (textField) in
            textField.placeholder = "Course"
        }
        let action = UIAlertAction(title: "New", style: .default){ (_) in
            let course = alert.textFields!.first?.text!
            print(course)

            let coursy = Course(context: PersistenceService.context)
            coursy.name = course
            PersistenceService.saveContext()

             // jump to next view controller
            segway()
        }
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }


    func segway() {
        let storyBoard: UIStoryboard = UIStoryboard(name: "viewcontroller", bundle: nil)
        let balanceViewController = storyBoard.instantiateViewController(withIdentifier: "viewcontroller") as! ViewController
        self.present(balanceViewController, animated: true, completion: nil)
    }
}

Надеюсь, эта помощь!

0 голосов
/ 28 декабря 2018

Если вы хотите перейти к следующему viewController после сохранения Course, вам нужно вызвать func segway() в блоке завершения UIAlertAction.

Пример:

let action = UIAlertAction(title: "New", style: .default){ (_) in
            let course = alert.textFields!.first?.text!
            print(course)

            let coursy = Course(context: PersistenceService.context)
            coursy.name = course
            PersistenceService.saveContext()
            // jump to next view controller
            segway()

        }

Также дважды проверьте имя вашей раскадровки, а идентификатор balanceViewController - "viewcontroller".

...