Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法强制转换类型为'__NSCFNumber';至';NSString';斯威夫特2_Ios_Swift_Swift2_Core Location - Fatal编程技术网

Ios 无法强制转换类型为'__NSCFNumber';至';NSString';斯威夫特2

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

我正在使用CLLocationmanager从app delegate获取纬度和经度 通过使用以下代码:

  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”类型