Как передать данные textfield.text через 2 контроллера вида - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь передать два текстовых поля (passName и passPhone) после того, как пользователь вводит их оба в ViewController как textField.text, в мой 3-й контроллер представления, так как он мне нужен для ссылки на дочернее имя базы данных firebase, но каждый раз, когда я запустить это дает мне нулевое возвращаемое значение? Я не понимаю, почему значение не проходит

executeSegue должен передавать textfield.text следующему контроллеру представления, потому что при переопределении функции func я установил его так:

Код ошибки: (ищите код для определения местоположения)

Поток 1: неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения

// ViewController

@IBOutlet weak var nameField: UITextField!
@IBOutlet weak var numberField: UITextField!
@IBAction func linkTapped(_ sender: Any) {
    if (nameField.text != nil && numberField.text != nil) {
         if error != nil {
                   //code
                } else {
                    self.performSegue(withIdentifier: "code", sender: self) 
                }
            }
        }

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let vc = verificationCodeViewController()
    vc.passName = self.nameField.text
    vc.passPhone = self.numberField.text
    nameField.endEditing(true)
    numberField.endEditing(true)
}

// verifyCodeViewController

var passName: String!
var passPhone: String!

@IBAction func Login(_ sender: Any) {
    if (code.text! != "") {
        let defaults = UserDefaults.standard
        let credential: PhoneAuthCredential = PhoneAuthProvider.provider().credential(withVerificationID: defaults.string(forKey: "authVID")!, verificationCode: code.text!)
        Auth.auth().signIn(with: credential) { (user, error) in
            if error != nil {
                print("error: \(String(describing: error?.localizedDescription))")
            } else {
                print("Phone Number: \(String(describing: user?.user.phoneNumber))")
                let userInfo = user?.user.providerData[0]
                print("Provider ID: \(String(describing: userInfo?.providerID))")
                self.performSegue(withIdentifier: "logged", sender: Any?.self)
            }
        }
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let vc = RankedClubScreen()
    vc.passName = self.passName
    vc.passPhone = self.passPhone
}

// RankedClubScreen - ViewController

var passName: String!
var passPhone: String!

@IBAction func signOutFunction(_ sender: Any) {
    do {
        try Auth.auth().signOut()
        let ref = Database.database().reference().child("Online Users")
        print(self.passName + self.passPhone) // Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
        ref.child(self.passName + self.passPhone).removeValue()

        self.view.window!.rootViewController?.dismiss(animated: true, completion: nil)
    } catch let error {
        print("not signed in...", error)
    }
}

1 Ответ

2 голосов
/ 09 июля 2019

Ваша проблема - создать новый виртуальный канал и не использовать назначение segue здесь

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  let vc = VerificationCodeViewController()

, а здесь

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   let vc = RankedClubScreen()

, поэтому пусть будет записано

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  let vc = segue.destination as! VerificationCodeViewController
  vc.//// set this 

пусть это будет сделано и для другого сеанса


enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...