获取用户位置在Xcode中不起作用

时间:2018-10-26 05:30:33

标签: swift xcode google-maps userlocation

晚上好,我正在尝试允许用户在地图上定位自己。当我运行该应用程序并访问我的Google Maps视图时,收到错误消息“该应用程序试图访问对隐私敏感的数据,而没有使用说明。该应用程序的Info.plist必须包含“ NSLocationWhenInUseUsageDescription”键,并带有字符串值,以解释用户了解应用程序如何使用此数据”,并且地图设置为默认状态。

我放了

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs your current location</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs your current location</string>

在我的info.plist中,但是它告诉我需要输入NSLocationWhenInUseUsageDescription才能访问位置。我已经把它放进去了,它仍然不会显示用户位置!我是否遗漏了一些东西或这是一个错误?在我更新到最新版本的Xcode之前,它对我来说工作正常。

我启用Google地图的代码如下

  func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    locationManager.delegate = self
    locationManager.stopUpdatingLocation()
    let location = locations.last
    let lat = (location?.coordinate.latitude)!
    let long = (location?.coordinate.longitude)!
    let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: long, zoom: 17.0)

    self.myMapView.animate(to: camera)

    showPartyMarkers(lat: lat, long: long)
}


func initGoogleMaps() {
    let camera = GMSCameraPosition.camera(withLatitude: 40.014281, longitude: -83.030914, zoom: 17.0)
    self.myMapView.camera = camera
    self.myMapView.delegate = self
    self.myMapView.isMyLocationEnabled = true
}
    func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) {
    let lat = place.coordinate.latitude
    let long = place.coordinate.longitude

    showPartyMarkers(lat: lat, long: long)

    let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: long, zoom: 17.0)
    myMapView.camera = camera
    txtFieldSearch.text=place.formattedAddress

3 个答案:

答案 0 :(得分:0)

在新的InfoPlist.strings文件中添加新记录。

<key>NSLocationAlwaysUsageDescription</key>
<string>app need your location for finding a place</string>

add  lines in viewdidload

locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
locationManager.desiredAccuracy = kCLLocationAccuracyBest

从模拟器中删除您的应用,然后再次运行。

答案 1 :(得分:0)

在plist中的键下方添加

Privacy - Location Always and When In Use Usage Description

Privacy - Location When In Use Usage Description

编辑

我没有看到 locationManager的初始化。

使用以下代码进行初始化:

   /// CLLocationManager object
   var locationManager: CLLocationManager = {
        let manager = CLLocationManager()
        manager.desiredAccuracy = kCLLocationAccuracyBest
        return manager
    }()

在Init开始更新位置后,为此在viewDidload中添加以下行

locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()

答案 2 :(得分:0)

重新发布问题后,我找到了答案。如果有人也遇到此问题,您要做的就是单击项目目标构建设置,单击信息(构建设置的左侧),然后确保“自定义iOS目标属性”具有与常规对象相同的信息。 p清单。如果不是这样,只需单击加号,然后将其添加进来。这应该可以解决问题,因为它与我有关。希望大家都觉得有用。