语言改变但CLLocationManager没有影响?

时间:2017-06-06 16:39:16

标签: ios xcode swift3

我正在使用本地化和cllocationManager

当改变语言时,每个事情都运作良好只有国家和城市名称带有以前的语言完全不受本地化影响,唯一的方法是关闭应用程序并再次打开它以使用新语言! 在不关闭应用的情况下改变国家和城市的任何解决方案?

本地化代码

static func setLanguage(lang:String) -> Void {
    UserDefaults.standard.removeObject(forKey: "AppleLanguages")
    UserDefaults.standard.set([lang], forKey: "AppleLanguages")
    UserDefaults.standard.synchronize()

    Bundle.setLanguage(lang)
}

CLLocationManager代码

   func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    locValue = manager.location!.coordinate
    print("locations = \(locValue.latitude) \(locValue.longitude)")


    let geoCoder = CLGeocoder()
    let location = CLLocation(latitude: locValue.latitude, longitude: locValue.longitude)

    geoCoder.reverseGeocodeLocation(location, completionHandler: { (placemarks, error) -> Void in

        // Place details
        var placeMark: CLPlacemark!
        placeMark = placemarks?[0]

        if placeMark != nil{
            // City
            if let city = placeMark.addressDictionary!["State"] as? NSString {

                self.locCity = city as String
            }



            // Country
            if let country = placeMark.addressDictionary!["Country"] as? NSString {

                self.locCountry = "\(country)," as String
            }

            self.countryLocation.text = "\(self.locCountry) \(self.locCity)"
            self.locationManager.stopUpdatingLocation()
        }

    })
}

1 个答案:

答案 0 :(得分:1)

您必须在NSLocale.currentLocaleDidChangeNotification上添加一个观察者来检测任何此类更改。

这样的事情:

NotificationCenter.default.addObserver(self, selector: #selector(MyClass.languageDidChange),
                                               name: NSLocale.currentLocaleDidChangeNotification, object: nil)

一旦languageDidChange中的内容发生变化,NSLocale方法就会被调用。

希望这有帮助。