Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

355
Views
How do I save the current user location in defaults?

I am trying to give users the option to save their current location. I use the defaults to save it and I found out, how to get the users location. But I am not sure how to combine those two tasks. So here is my question:

How can I get my function to call users location, so it can be saved?

@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)")

}

This is my most recent try but I don't know why my struct (lat: ,long:) is not taking the input

@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()

    }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

@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")

}

To get back the location from UserDefaults:

let previousLocationEncoded = UserDefaults.standard.object(forKey: "savedLocation") as? Data
let previousLocationDecoded = NSKeyedUnarchiver.unarchiveObject(with: previousLocationEncoded!) as! CLLocation
over 4 years ago · Santiago Trujillo Report

0

The functions used in Sujal's answer are deprecated. Here are the current (2021) working version of the functions:

// Save location to UserDefaults
if let encodedLocation = try? NSKeyedArchiver.archivedData(withRootObject: location, requiringSecureCoding: false) {
    UserDefaults.standard.set(encodedLocation, forKey: "savedLocation")
}

// Load the last saved location
if let loadedLocation = UserDefaults.standard.data(forKey: "savedLocation"),
   let decodedLocation = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(loadedLocation) as? CLLocation {
    // Use the decodedLocation as you want
}
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!