Это не прямой ответ, но может привести к одному.
Проблема в том, что код, размещенный в вашем вопросе, работает, как и ожидалось.Вот что я сделал.
Сначала я хотел изолировать проблему либо от ошибки кодирования Swift, либо от ошибки кодирования Firebase.Я подключил некоторые тестовые значения, закомментировал код Firebase и добавил пару операторов print в registerUserIntoDatabseWithUID, чтобы посмотреть, является ли то, что печатается, ожидаемыми данными.Вывод в точности соответствует ожидаемому, включая две тестовые координаты 2.0 и 3.0
func testBuildingDataset() {
let coords: [String: Double] = [
"lat": 2.0,
"long": 3.0
]
let uid = "uid_0"
let category = "some cat"
let description = "some desc"
let cost = "some cost"
let JobImageUrl = "some jobImgUrl"
let fromId = "some fromId"
let timestamp = "some timestamp"
let values = ["category": category, "description": description, "cost": cost, "JobImageUrl": JobImageUrl, "fromId": fromId, "timestamp": timestamp, "location": coords] as [String : Any]
registerUserIntoDatabseWithUID(uid: uid, values: values as [String : AnyObject])
}
func registerUserIntoDatabseWithUID(uid: String, values: [String: AnyObject]) {
print(uid)
print(values)
. Вывод: набор данных (по крайней мере, то, что я указал) был надежным, а код Swift работает, как и ожидалось.Затем я раскомментировал функцию обновления Firebase и снова запустил тест.
func registerUserIntoDatabseWithUID(uid: String, values: [String: AnyObject]) {
let usersReference = self.ref.child("JobPost").child(uid)
usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
if err != nil {
print("err")
return
}
//self.dismiss(animated: true, completion: nil)
})
}
, а затем проверил мою Firebase.Записанные данные в точности соответствуют ожиданиям.
"JobPost" : {
"uid_0" : {
"JobImageUrl" : "some jobImgUrl",
"category" : "some cat",
"cost" : "some cost",
"description" : "some desc",
"fromId" : "some fromId",
"location" : {
"lat" : 2,
"long" : 3
},
"timestamp" : "some timestamp"
}
},
Это приводит к общему выводу, что код в вопросе работает, и проблема лежит за пределами этого кода.
Это ключ
// если я пытаюсь сохранить местоположение пользователя, строка ниже вылетает с ошибкой // Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании Необязательное значение
let myLocation = self.mapView.myLocation
Таким образом, проблема в том, что либо mapView равен nil, либо myLocation равен nil
Однако этот код не был включен в вопрос, поэтому дальнейшее его изучение невозможно.Кроме того, эта ошибка может быть обнаружена при безопасной работе с вашими дополнительными компонентами
guard let myMap = self.mapView else {
print("the mapview was nil")
return
}
//use myMap from here as as you know it's not nil
Кроме того, если mapView - это MKMapView, у него нет свойства myLocation, только свойство userLocation, так что, по-видимому, этоПользовательский класс, который также должен быть включен в вопрос.
Надеюсь, что поможет.