gpt4 book ai didi

swift - 如何在默认设置中保存当前用户位置?

转载 作者:搜寻专家 更新时间:2023-11-01 06:11:50 26 4
gpt4 key购买 nike

我正在尝试为用户提供保存其当前位置的选项。我使用默认值来保存它,我发现了如何获取用户位置。但我不确定如何将这两项任务结合起来。所以这是我的问题:

如何让调用用户位置的函数得以保存?

@IBAction func addLocation(_ sender: Any) {

// CALL LOCATION MANAGER TO GET LOCATION IN LAT AND LONG
self.saveDefaults()

}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
print("locations = \(locValue.latitude) \(locValue.longitude)")
}

func saveDefaults()
{
UserDefaults.standard.set(self.pickers, forKey: "pickers")
print("SAVED PICKERS: \(pickers)")

}

这是我最近的尝试,但我不知道为什么我的结构 (lat: ,long:) 没有接受输入

@IBAction func addLocation(_ sender: Any) {

var locations: [CLLocation]
let manager: CLLocationManager

let userLocation:CLLocation = locations[0] as CLLocation

// Call stopUpdatingLocation() to stop listening for location updates,
// other wise this function will be called every time when user location changes.

manager.stopUpdatingLocation()

print("user latitude = \(userLocation.coordinate.latitude)")
print("user longitude = \(userLocation.coordinate.longitude)")

self.pickers.append(pickerStruct(lat: userLocation.coordinate.latitude, long: userLocation.coordinate.longitude))

self.saveDefaults()

}

最佳答案

@IBAction func addLocation(_ sender: Any) {
locationManager.startUpdatingLocation() //This will call the delegate method below where you can save the location
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

guard locations.count > 0 else {
return
}

guard let location = locations.last else {
return
}

locationManager.stopUpdatingLocation() //Stop location updates after getting the location and save that location as below

let encodedLocation = NSKeyedArchiver.archivedData(withRootObject: location)
UserDefaults.standard.set(encodedLocation, forKey: "savedLocation")

}

从 UserDefaults 取回位置:

let previousLocationEncoded = UserDefaults.standard.object(forKey: "savedLocation") as? Data
let previousLocationDecoded = NSKeyedUnarchiver.unarchiveObject(with: previousLocationEncoded!) as! CLLocation

关于swift - 如何在默认设置中保存当前用户位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54645426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com