Ios 无法强制转换类型为'__NSCFNumber';至';NSString';斯威夫特2
我正在使用CLLocationmanager从app delegate获取纬度和经度 通过使用以下代码:Ios 无法强制转换类型为'__NSCFNumber';至';NSString';斯威夫特2,ios,swift,swift2,core-location,Ios,Swift,Swift2,Core Location,我正在使用CLLocationmanager从app delegate获取纬度和经度 通过使用以下代码: class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate{ var window: UIWindow? var locationManager: CLLocationManager! var seenError : Bool = false var
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate{
var window: UIWindow?
var locationManager: CLLocationManager!
var seenError : Bool = false
var locationFixAchieved : Bool = false
var locationStatus : NSString = "Not Started"
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
initLocationManager();
return true
}
func initLocationManager() {
seenError = false
locationFixAchieved = false
locationManager = CLLocationManager()
locationManager.delegate = self
CLLocationManager.locationServicesEnabled()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
locationManager.stopUpdatingLocation()
if ((error) != nil) {
if (seenError == false) {
seenError = true
print(error)
}
}
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if (locationFixAchieved == false) {
locationFixAchieved = true
var locationArray = locations as NSArray
var locationObj = locationArray.lastObject as! CLLocation
var coord = locationObj.coordinate
NSUserDefaults.standardUserDefaults().setObject(coord.latitude, forKey: "latitude")
NSUserDefaults.standardUserDefaults().setObject(coord.longitude, forKey: "longitude")
NSUserDefaults.standardUserDefaults().synchronize()
print(coord.latitude)
print(coord.longitude)
}
}
在地图视图中使用nsuserdefaults中的值时,请使用以下代码
latitude = (NSUserDefaults.standardUserDefaults().objectForKey("latitude") as? NSString)! as String
longitude = (NSUserDefaults.standardUserDefaults().objectForKey("longitude") as? NSString)! as String
let latitude1 = (latitude as NSString).doubleValue
let longitude1 = (longitude as NSString).doubleValue
let location = CLLocationCoordinate2D(
latitude: latitude1,
longitude: longitude1
)
我在
latitude=(NSUserDefaults.standardUserDefaults().objectForKey(“latitude”)处收到错误“无法将类型为“\uu NSCFNumber”(0x1944fb9f8)的值强制转换为“NSString”。(NSUserDefaults.standardUserDefaults().objectForKey(“latitude”)为?NSString)!as String
NSUserDefaults.standardUserDefaults()。objectForKey(“经度”)是一个NSNumber,因此您只需执行以下操作:
let latitude = NSUserDefaults.standardUserDefaults().objectForKey("latitude")
let longitude = NSUserDefaults.standardUserDefaults().objectForKey("longitude")
let latitude1 = latitude.doubleValue
let longitude1 = longitude.doubleValue
此外,首先可以像这样设置用户默认值
let latitude: CLLocationDegrees = 1.0
NSUserDefaults.standardUserDefaults().setDouble("latitude", forKey: "latitude")
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if (locationFixAchieved == false) {
locationFixAchieved = true
let locationArray = locations as NSArray
let locationObj = locationArray.lastObject as! CLLocation
let coord = locationObj.coordinate
NSUserDefaults.standardUserDefaults().setDouble(coord.latitude, forKey: "latitude")
NSUserDefaults.standardUserDefaults().setDouble(coord.longitude, forKey: "longitude")
NSUserDefaults.standardUserDefaults().synchronize()
print(coord.latitude)
print(coord.longitude)
}
}
在AppDelegate中,使用以下代码将纬度和经度保存在NSUserDefaults中,如下所示
let latitude: CLLocationDegrees = 1.0
NSUserDefaults.standardUserDefaults().setDouble("latitude", forKey: "latitude")
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if (locationFixAchieved == false) {
locationFixAchieved = true
let locationArray = locations as NSArray
let locationObj = locationArray.lastObject as! CLLocation
let coord = locationObj.coordinate
NSUserDefaults.standardUserDefaults().setDouble(coord.latitude, forKey: "latitude")
NSUserDefaults.standardUserDefaults().setDouble(coord.longitude, forKey: "longitude")
NSUserDefaults.standardUserDefaults().synchronize()
print(coord.latitude)
print(coord.longitude)
}
}
要获取该值,请在viewcontroller文件中使用此代码
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let latitude2 = NSUserDefaults.standardUserDefaults().objectForKey("latitude")
let longitude2 = NSUserDefaults.standardUserDefaults().objectForKey("longitude")
let latitude1 = latitude2!.doubleValue
let longitude1 = longitude2!.doubleValue
let location = CLLocationCoordinate2D(
latitude: latitude1,
longitude: longitude1
)
}
coord.latitude
是一个double
,而不是字符串。因此,当您将其保存到NSUserDefaults
中时,它将转换为NSNumber
。所以这应该可以做到:让latitude1=(latitude为NSNumber)。doubleValue
您正在将该值保存为一个数字,并尝试将其读回字符串。到底是什么问题?谢谢,问题已经解决了。它显示无法将“AnyObject”类型的值赋给“String”类型