Я работаю над приложением iOS, которое регистрирует пользователя в виде входа в систему.Как передать данные при отключении вида контроллера в Swift
Существует два контроллера: LognViewController и SignUpViewController Если вместо этого зарегистрирован новый пользователь, тогда контроллер регистрации открывается вызов API для получения новой учетной записи пользователя. Затем страница «Зарегистрироваться» должна перенести новый объект «Пользователь» обратно на страницу «Вход», которая, в свою очередь, вводит пользователя в основное приложение.
Основано на a previous post Мне нравится идея закрытия, и я пытаюсь ее реализовать здесь; однако, я получаю ноль от переменной функции закрытия. Мой код-то вроде этого:
В первом контроллере:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "userSignUp" {
if !self.userTextField.text!.isEmpty {
let nav = segue.destinationViewController as! UINavigationController
let vc = nav.topViewController as! SignUpViewController
vc.email = self.userTextField.text!
vc.submitUser = signUpToLogIn
}
}
}
// asynchronous get user back from sign up
func signUpToLogIn(currentUser: User) {
self.currentUser = currentUser
self.checkCurrentUser()
}
Во втором контроллере:
var submitUser: ((currentUser: User) ->())!
@IBAction func signUpButtonTapped(sender: UIButton) {
doSignUp({(u: User?) ->() in
if u != nil {
self.submitUser(currentUser: u!)
self.dismissViewControllerAnimated(false, completion: nil)
}
})
}
Я смотрю на отладчик, и он говорит, что фатальная ошибка: неожиданно nil при развертывании необязательного значения. Когда я работаю с точкой останова, я вижу в разделе переменных, что переменная submitUser всегда равна нулю.
Есть ли другой способ сделать это сейчас?
When пользователь использует ваше приложение, они получают доступ к SignUpViewController, переходя из LoginViewController? Если да, похоже, что вы хотите передать данные обратно в LoginViewController. Я бы использовал делегата для этого. Вы также можете изучить использование unind segue – chickenparm