Запросить массив из Firestore

У меня есть несколько строк и 2 массива, хранящихся в Firestore, и теперь я пытаюсь их получить, но понятия не имею, как это сделать. Ну, строки работают нормально, но я не знаю, как я могу запросить массивы. Я получаю код ошибки:

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

И вот мой код:

                            //For-loop
                        for document in QuerySnapshot!.documents
                        {
                            self.list.removeAll()
                            //let document = QuerySnapshot!.documents
                            let data = document.data()

                            let data1 = data["Dog"] as? String
                            let data2 = data["Person"] as? String
                            let data3 = data["What"] as? String
                            let data4 = data["Time"] as? String
                            let data5 = data["Date"] as? String
                            let data6 = data["Kilometers"] as? String
                            let data7 = data["Timer"] as? String
                            let data8 = data["Latitude"] as? Array<Double>
                            let data9 = data["Longitude"] as? Array<Double>

                            let txt = listTxt(dog: data1!, person: data2!, action: data3!, time: data4!, date: data5!, kilometers: data6!, timer: data7!, latitude: data8 ?? [], longitude: data9 ?? [])

                            print(txt)

                            tempTxt.append(txt)

                        }
                        self.list = tempTxt
                        self.tableView.reloadData()
                    }

Массивы хранятся как Двойной, и смысл в том, чтобы получить его как двойник и снова преобразовать в CLLocationCoordinate2D, чтобы я мог использовать координаты для карты. Если вы знаете, как решить эту проблему, пожалуйста, дайте мне знать. :)

Внутри класса:

class listTxt
{
    var dog: String
    var person: String
    var action: String
    var time: String
    var date: String
    var kilometers: String
    var timer: String
    var latitude: [String]
    var longitude: [String]

    init(dog: String, person: String, action: String, time: String, date: String, kilometers: String, timer: String, latitude: [String], longitude: [String])
    {
        self.dog = dog
        self.person = person
        self.action = action
        self.time = time
        self.date = date
        self.kilometers = kilometers
        self.timer = timer
        self.latitude = latitude
        self.longitude = longitude
    }

Внутри ячейки истории

    class HistoryCell: UITableViewCell
{

    @IBOutlet weak var DogName: UILabel!
    @IBOutlet weak var Person: UILabel!
    @IBOutlet weak var Action: UILabel!
    @IBOutlet weak var Date: UILabel!
    @IBOutlet weak var Time: UILabel!
    @IBOutlet weak var timer: UILabel!
    @IBOutlet weak var kilometer: UILabel!
    var latitude: [String] = []
    var longitude: [String] = []

    func setCell(list: listTxt)
    {
        DogName.text = list.dog
        Person.text = list.person
        Action.text = list.action
        Date.text = list.date
        Time.text = list.time
        timer.text = list.timer
        kilometer.text = list.kilometers
        latitude = list.latitude
        longitude = list.longitude
    }
}

Данные пожарного хранилища: Запросить массив из Firestore

Заранее спасибо. :)

Обратитесь к этому stackoverflow.com/a/32850058/5255016

Saurabh 06.03.2019 12:28

@Saurabh Вы имеете в виду, что я должен использовать «as? String» вместо Double? И чем его конвертировать в Int, а из int в Double? :)

user11131456 06.03.2019 12:28

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

Saurabh 06.03.2019 12:30

@Saurabh Да, это CLLocationCoordinate2D с самого начала. Который я преобразовал, чтобы вставить данные в Firestore

user11131456 06.03.2019 12:34

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

Saurabh 06.03.2019 12:41

Содержит ли вывод данных документа какой-либо ключ со значением null/nil? Если да, обратитесь к этому вопросу stackoverflow.com/questions/37606376/…

Saurabh 06.03.2019 12:52

@Saurabh, я проверю, подожди

user11131456 06.03.2019 12:58

@Saurabh imgur.com/a/zP6S6uL Это результат атм.

user11131456 06.03.2019 13:00

почему вы передаете широту и долготу в Array<Double>?

Saurabh 06.03.2019 13:11

Я изменил его обратно на [Double], и ​​в конце концов я добавил print(data8 ?? 0.0), чтобы попробовать, но все они возвращают 0,0, и по крайней мере у одного из них широта и долгота не равны 0.

user11131456 06.03.2019 13:23

хорошо... попробуйте сохранить его без квадратных скобок как Double

Saurabh 06.03.2019 13:25

какой тип значения вы получаете для ключей широты и долготы, это строка или массив?

Saurabh 06.03.2019 13:27

@Saurabh Вы имеете в виду, когда я сохраняю его в Firestore?

user11131456 06.03.2019 13:29

Нет при извлечении из Firestore

Saurabh 06.03.2019 13:33

Вы можете поделиться данными, которые вы извлекаете из firestore?

Saurabh 06.03.2019 13:35

@Saurabh EDIT: о, проверьте редактирование ветки

user11131456 06.03.2019 13:35

Вы пробовали использовать [String] вместо [Double]?

Saurabh 06.03.2019 13:37

Проверьте редактирование в моей теме, может быть, где-то еще не так

user11131456 06.03.2019 13:48

В обоих классах нет проблем. Можете ли вы показать вывод, который вы получите после печати document.data() в вашей консоли?

Saurabh 06.03.2019 13:57

замените обе клавиши Широта на широту и Долгота на долготу в коде

Saurabh 06.03.2019 14:04

@Saurabh imgur.com/a/b7YtAcF <-- Вот это

user11131456 06.03.2019 14:06

Проверьте мой ответ @PrezyProgramming

Saurabh 06.03.2019 14:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
22
110
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы пробовали, как показано ниже?

 let data8 = data["latitude"] as? [Double]
 let data9 = data["longitude"] as? [Double]

На самом деле вы получаете доступ к данным с неправильными ключами... «широта», «долгота» являются допустимыми ключами, но вы получаете «Широту», «Долготу», которых нет в вашем снимке данных.

Примечание Убедитесь, что при сохранении данных вы отправляете их в виде массива двойных значений.

Это когда я сохраняю это: `var latitudes:[Double] = [] var longitudes:[Double] = []` Я попробую то, что вы сказали, но я думаю, что уже пробовал это:/

user11131456 06.03.2019 13:20

так что вы сохраняете пустой массив двойных?

Abu Ul Hassan 06.03.2019 13:22

также, пожалуйста, покажите мне словарь данных, который вы сохраняете.

Abu Ul Hassan 06.03.2019 13:23

Ну, сначала у меня это. (При первом просмотре, когда я сохраняю его в Firestore) var locations: [CLLocationCoordinate2D] = [] var latitudes:[Double] = [] var longitudes:[Double] = [] ViewDidLoad() { latitudes = locations.map({ $0.latitude }) longitudes = locations.map({ $0.longitude }) } SaveToFireStore() { //A lot of code before this, but nothing that includes lat and long. "latitude": latitudes, "longitude": longitudes ] }

user11131456 06.03.2019 13:32

проверьте отредактированный ответ, на самом деле вы получаете доступ к данным с неправильными ключами ... "широта", "долгота" являются допустимыми ключами, но вы извлекаете с помощью "широты", "долготы", которых нет в вашем снимке данных.

Abu Ul Hassan 06.03.2019 14:12
Ответ принят как подходящий

Попробуйте заменить следующие строки кода:

let data8 = data["latitude"] as? [Double]
let data9 = data["longitude"] as? [Double]

Причина: Доступ к данным с неправильными ключами

Другие вопросы по теме