исправить поток 1: фатальная ошибка: неожиданно обнаружен ноль при развертывании необязательного значения - PullRequest
0 голосов
/ 02 июля 2018

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

let uid = Auth.auth().currentUser?.uid
   Database.database().reference().child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
    if let dictionary = snapshot.value as? [String: AnyObject] {
        self.navigationItem.title = dictionary["name"] as? String
    }
    print (snapshot)
}, withCancel: nil)

В моем sideBarView есть то же сообщение об ошибке

//My other error is at func didselectrowat
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.delegate!.sidebarDidSelectRow(row: Row(row: indexPath.row))
}

// вход в контроллер

  Auth.auth().signIn(withEmail: email, password: password) { (user, error) in
        if error != nil {
            print(error!)
            return
        }
       self.defaults.set(true, forKey: "User is logged in")
        let mainController = UINavigationController(rootViewController: CustomTabBarController())
        self.present(mainController, animated: true, completion: nil)
    }
}

Я пытаюсь создать контроллер боковой панели, в котором пользователь может выбрать свой профиль и внести изменения. Этот код находится под моим основным контроллером. я подключаю что-то не так? Я видел несколько случаев в теме 1: фатальная ошибка, однако она не учит меня, как исправить мою. заранее спасибо

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Я нашел ответ на свой вопрос. Я не уверен, что это поможет другим, но это помогло мне. Что я сделал, так это закомментировал

let uid = Auth.auth().currentUser?.uid
Database.database().reference().child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
    self.navigationItem.title = dictionary["name"] as? String
}
print (snapshot)
}, withCancel: nil)

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

0 голосов
/ 03 июля 2018

Если у вас есть необязательное значение, вы должны предположить, что оно может быть ноль, и вам нужно решить, что вы хотите сделать, если оно ноль.

"?" Означает: я знаю, что это необязательно, если это ноль, то дайте мне необязательное значение вместо сбоя.

"!" означает: я знаю, что это необязательно, но я на 100% уверен, что это не может быть ноль. Пожалуйста, сбой, если я не прав.

let uid = Auth.auth().currentUser?.uid

означает, что из-за? в currentUser? если currentUser равен nil, ваше приложение не аварийно завершает работу, но выдает uid, равный nil. Так что вы собираетесь делать, если это ноль? Вы решаете.

В следующей строке

Database.database().reference().child("users").child(uid!)

"!" в UID! означает "Я уверен на 100%, что uid не ноль, пожалуйста, вылетает, если это так". И ваше приложение делает, как вы просили.

«Я обновил свой код. Я думаю, что все правильно. Однако я уверен, что это не так». Это истинная мудрость. Это серьезно.

Поскольку currentUser == nil, я бы нашел все места, где установлен currentUser, проверил, может ли какое-либо из этих мест установить currentUser равным nil, и почему ни одно из мест, которое могло бы установить его на что-то, отличное от nil, не будет выполнено. Объект равен нулю, когда его не должно быть, если кто-то устанавливает его на ноль, а кто-то не должен, или тот, кто должен установить его на ноль - нет.

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