【发布时间】:2017-03-01 10:52:57
【问题描述】:
尝试将let myLocations[CLLocation] 保存到 Firebase,但出现错误:
原因:'(setValue:) 无法将 CLLocation 类型的对象存储在位置 0。只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象。
有什么帮助吗?
代码:
var myLocations: [CLLocation] = []
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
myLocations.append(locations[0] as CLLocation)
let spanX = 0.007
let spanY = 0.007
var location = CLLocation()
for L in myLocations {
location = L
}
let newRegion = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpanMake(spanX, spanY))
theMap.setRegion(newRegion, animated: true)
if (myLocations.count > 3){
let sourceIndex = myLocations.count - 1
let destinationIndex = myLocations.count - 4
let c1 = myLocations[sourceIndex].coordinate
let c2 = myLocations[destinationIndex].coordinate
var a = [c1, c2]
let polyline = MKPolyline(coordinates: &a, count: a.count)
polyline.title = "polyline"
theMap.add(polyline)
}
if startLocation == nil {
startLocation = locations.first as CLLocation!
} else {
let lastDistance = lastLocation.distance(from: locations.last as CLLocation!) //In Meter
distanceTraveled += lastDistance * 0.000621371192 //In Miles
//1 Meter = 0.000621371192 Miles
//1 Mile = 1609.344 Meters
distanceLabel_String = String(format: "%.2f mi", distanceTraveled)
distanceLabel.text = distanceLabel_String
let altitude = lastLocation.altitude // In Meters
let altitudeInFeets = altitude / 0.3048 //In Feets
arrayOfAltitude.append(altitudeInFeets)
let maxAltitude = arrayOfAltitude.max()
altitudeLabel_String = String(format: "%.2f ft", maxAltitude!)
altitudeLabel.text = String(format: "%.2f ft", altitudeInFeets)
}
lastLocation = locations.last as CLLocation!
}
func saveLocations() {
let locations = myLocations
let trailInfo: Dictionary<String, Any> = [ "locations" : locations,]
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Trails").childByAutoId().setValue(trailInfo)
}
@IBAction func doneActivityHit(_ sender: UIButton) {
saveLocations()
self.view.removeFromSuperview()
myLocations.removeAll()
distanceTraveled = 0
}
【问题讨论】:
-
显示。您的。代码。
-
我添加了一些代码
-
您需要以
NSNumber、NSString、NSDictionary和NSArray的格式存储它。保存在[{"longitude":xxxx, "latitude":xxxx}]。
标签: ios swift firebase firebase-realtime-database