NSUserDefaults и использование метода setobject для хранения ошибки CLLocationCoordinate2D в Swift
Я нашел ответ на этот вопрос здесь: Храните CLLocationCoordinate2D в NSUserDefaults. И код написан на Objective C. Я понимаю, по большей части, что происходит с кодом в этой ссылке. Однако мне трудно перевести синтаксис на Swift. И я думаю, что другим было бы полезно иметь этот перевод.
Просто чтобы повторить ошибку, это: Cannot invoke 'setObject' with an argument list of type (CLLocationCoordinate2D, forKey: String!)
, И вот синтаксис, который вызывает эту проблему:
let mapAnnotations = NSUserDefaults.standardUserDefaults()
let newCoordinate = self.mapView.convertPoint(touchPoint, toCoordinateFromView: self.mapView)
var title: String! = ""
self.mapAnnotations.setObject(newCoordinate, forKey: title) //the error is here
self.mapAnnotations.synchronize()
1 ответ
Решение
Просто измените свой код на следующий
let mapAnnotations = NSUserDefaults.standardUserDefaults()
let newCoordinate = self.mapView.convertPoint(touchPoint, toCoordinateFromView: self.mapView)
let lat = NSNumber(double: newCoordinate.latitude)
let lon = NSNumber(double: newCoordinate.longitude)
let userLocation: NSDictionary = ["lat": lat, "long": lon]
self.mapAnnotations.setObject(userLocation, forKey: "userLocation") //the error is here
self.mapAnnotations.synchronize()
Что я сделал, это:
- Создать два
NSNumber
объекты сDouble
и собрал их вNSDictionary
(а не СвифтDictionary
). - Прошло это
NSDictionary
быть спасенным вашимNSUserDefaults
, который должен принять это сейчас, так же, как код Objective-C.