Сохраните массив CLLocationCooridnate2D в Firestore - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь сохранить CLLocationCoordinate2D массив в Firestore, но я получаю ошибку:

'FIRInvalidArgumentException', причина: 'Неподдерживаемый тип: NSConcreteValue'

И я действительно не знаю, как я могу это сделать.

В верхней части кода есть это:

var locations: [CLLocationCoordinate2D] = []

И нажмите кнопку «Сохранить». У меня есть этот код:

//Document Reference properties
        var _: DocumentReference = self.db
            //Collection into Subcollection & Documents
            .collection("rastad").document(authentication!)
            .collection("promenad").addDocument(data:
                //Insert first values
                ["Dog": txtfield_dog.text!,
                 "Person": txtfield_person.text!,
                 "What": txtfield_what.text!,
                 "Date": txtfield_Datum.text!,
                 "Time": txtfield_Time.text!,
                 "Timer": txtfield_timer.text!,
                 "Kilometers": txtfield_km.text!,
                 "Locations": locations
                ], completion: { (err) in
                    if err != nil
                    {
                        print("Error adding info-details")
                        return
                    }
                    else
                    {
                        print("Succeded!")
    }

Итак, как я могу решить эту проблему? Как я могу вставить массив CLLocationCoordinate2D в Firestore? А также, как я могу позже получить его? Буду очень признателен за любую помощь! Спасибо!

РЕДАКТИРОВАТЬ: Может быть, эта ошибка понятна для вас, но хорошо. Это не ясно для меня, и поэтому я задаю вопрос, конечно. Если бы я знал ответ, я бы не ответил на этот вопрос. И вместо того, чтобы не любить и оставить ветку, вы можете по крайней мере оставить комментарий и сказать мне причину неприязни. Итак, я думаю, мой вопрос встанет.

1 Ответ

0 голосов
/ 05 марта 2019

Чтобы разбить его, Firebase не знает, что такое CLLocationCoordinate2D объект. Но он знает, что такое массив, и знает, что такое строки, целые и двойные числа. Таким образом, вам придется анализировать ваш массив мест, чтобы он мог что-то понять. Вы можете сохранить значение в Firestore, так как координата - это просто пара двойных значений. Вы можете сделать это несколькими способами, но проще всего, вероятно, разделить массив положений, один для значений широты и один для долготы. Например, вы можете использовать let latitudes = locations.map({ $0.latitude }) и то же самое для долгот. Затем в Firestore вы обновите его до чего-то вроде:

                 "Person": txtfield_person.text!,
                 "What": txtfield_what.text!,
                 "Date": txtfield_Datum.text!,
                 "Time": txtfield_Time.text!,
                 "Timer": txtfield_timer.text!,
                 "Kilometers": txtfield_km.text!,
                 "LocationLatitudes": latitudes,
                 "LocationLongitudes": longitude,
                ]

Применить обратную логику для получения. Вам нужно будет перебрать массивы lat и long и объединить в один массив CLLocationCoordinate2D объектов.

...