在 Firestore 中保存一个 CLLocationCooridnate2D 数组
Save a CLLocationCooridnate2D array in Firestore
我正在尝试保存一个
CLLocationCoordinate2D
阵列到 Firestore,但我收到错误:
'FIRInvalidArgumentException', reason: 'Unsupported type: NSConcreteValue'
而且我真的不知道如何执行此操作。
在代码的顶部我有这个:
var locations: [CLLocationCoordinate2D] = []
然后在 'save' 按钮中。我有这个代码:
//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?而且,我以后怎么找回它?我真的很感激任何帮助!谢谢!
编辑:也许这个错误对你来说很清楚,但是很好。这对我来说并不清楚,这就是我当然要问这个问题的原因。如果我知道答案,我不会回答这个问题。而不是不喜欢并离开线程,你至少可以发表评论并告诉我不喜欢的原因。所以,我想我的问题会成立。
具体来说,Firebase 不知道 CLLocationCoordinate2D
对象是什么。但它确实知道什么是数组,也知道什么是字符串、整数和双精度数。所以你必须将你的位置数组解析成它可以理解的东西。您可以将该值存储在 Firestore 中,因为坐标实际上只是一对双精度值。您可以通过多种方式执行此操作,但最简单的方法可能是拆分位置数组,一种用于纬度值,一种用于经度。例如,您可以使用 let latitudes = locations.map({ [=12=].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,
]
应用反向逻辑进行检索。您将需要遍历纬度和经度数组并将其组合成一个包含 CLLocationCoordinate2D
个对象的数组。
我正在尝试保存一个
CLLocationCoordinate2D
阵列到 Firestore,但我收到错误:
'FIRInvalidArgumentException', reason: 'Unsupported type: NSConcreteValue'
而且我真的不知道如何执行此操作。
在代码的顶部我有这个:
var locations: [CLLocationCoordinate2D] = []
然后在 'save' 按钮中。我有这个代码:
//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?而且,我以后怎么找回它?我真的很感激任何帮助!谢谢!
编辑:也许这个错误对你来说很清楚,但是很好。这对我来说并不清楚,这就是我当然要问这个问题的原因。如果我知道答案,我不会回答这个问题。而不是不喜欢并离开线程,你至少可以发表评论并告诉我不喜欢的原因。所以,我想我的问题会成立。
具体来说,Firebase 不知道 CLLocationCoordinate2D
对象是什么。但它确实知道什么是数组,也知道什么是字符串、整数和双精度数。所以你必须将你的位置数组解析成它可以理解的东西。您可以将该值存储在 Firestore 中,因为坐标实际上只是一对双精度值。您可以通过多种方式执行此操作,但最简单的方法可能是拆分位置数组,一种用于纬度值,一种用于经度。例如,您可以使用 let latitudes = locations.map({ [=12=].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,
]
应用反向逻辑进行检索。您将需要遍历纬度和经度数组并将其组合成一个包含 CLLocationCoordinate2D
个对象的数组。