Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting CLLocationCoordinate2D to a String that can be stored

I'm trying to save the coordinates of a user while in one ViewController so that it can be used to create an Annotation that can displayed in another ViewController.

In the view controller that stores the coordinates I'm using the code

NSUserDefaults.standardUserDefaults().setObject( Location, forKey: "Location")

In the map view controller that displays the annotation I'm trying to get the coordinates using the code

let Location = NSUserDefaults.standardUserDefaults().stringForKey("Location")
var Annotation = MKPointAnnotation()
Annotation.coordinate = Location    

It is telling me that the value of type String? to a value of type CLLocationCoordinate2D.

So how do I convert the CLLocationCoordinate2D coordinates into a value of type String?

like image 950
Trip Phillips Avatar asked Dec 19 '22 03:12

Trip Phillips


1 Answers

This way you can store Locations to NSUserDefaults:

//First Convert it to NSNumber.
let lat : NSNumber = NSNumber(double: Location.latitude)
let lng : NSNumber = NSNumber(double: Location.longitude)

//Store it into Dictionary
let locationDict = ["lat": lat, "lng": lng]

//Store that Dictionary into NSUserDefaults
NSUserDefaults.standardUserDefaults().setObject(locationDict, forKey: "Location")

After that you can access it this way:

//Access that stored Values
let userLoc = NSUserDefaults.standardUserDefaults().objectForKey("Location") as! [String : NSNumber]

//Get user location from that Dictionary
let userLat = userLoc["lat"]
let userLng = userLoc["lng"]

var Annotation = MKPointAnnotation()

Annotation.coordinate.latitude = userLat as! CLLocationDegrees  //Convert NSNumber to CLLocationDegrees
Annotation.coordinate.longitude = userLng as! CLLocationDegrees //Convert NSNumber to CLLocationDegrees

UPDATE:

HERE is your Example project.

like image 60
Dharmesh Kheni Avatar answered Jan 31 '23 10:01

Dharmesh Kheni