0

我在这里找到了这个问题的答案:Store CLLocationCoordinate2D to 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()
4

1 回答 1

0

只需将您的代码更改为以下

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

我所做的是:

  • 使用 s创建两个NSNumber对象Double并将它们收集在一个NSDictionary(而不是 Swift Dictionary)中。
  • 将它传递NSDictionary给 your NSUserDefaults,它现在应该接受它,就像 Objective-C 代码一样。
于 2015-08-28T02:13:44.760 回答