Столкнулся с очень на мой непрофессиональный взгляд проблемой. В приложении использую Firebase. Есть экран Регистрации пользователя и экран Настроек персональных данных пользователя. И там и там есть поле Логин, на экране Регистрация ввожу при регистрации, на экране Настроек можно его сменить. И там и там стоит проверка на наличие уже такого же логина у другого пользователя. Вот например код из экрана Настроек, где можно сменить логин, аватар и пр.:
@IBAction func saveButton(_ sender: UIBarButtonItem) {
guard let username = loginTextField.text, username != "" else {
displayWarningLabel(withText: "Придумайте Логин")
return
}
if username != currentUsername {
let databaseRef = Database.database().reference()
databaseRef.child("logins").observeSingleEvent(of: DataEventType.value, with: { (snapshot) in
if snapshot.hasChild(username){
self.displayWarningLabel(withText: "Логин уже занят")
print("Login exists")
return
} else {
self.changeUsersData()
self.profileImageUpdate()
self.dismiss(animated: true, completion: nil)
print("Login does not exist")
}
})
}
if aboutTextView.text != currentAbout {
changeUsersData()
self.profileImageUpdate()
self.dismiss(animated: true, completion: nil)
}
self.profileImageUpdate()
}
Если при изменении логина при написании использовать простую точку, то при попытке сохранить изменение, приложение вылетает на строке snapshot.hasChild(username)
.
В консоле значится:
libc++abi.dylib: terminating with uncaught exception of type NSException
warning: could not execute support code to read Objective-C class data in the process. This may reduce the quality of type information available.
Если использовать в написании логина любой другой символ: запятую, тире, вопросительный знак и пр., все сохраняется нормально.
В чем может быть проблема, почему именно точка?