我想显示用户的城市&在我的申请中陈述。但是,我似乎无法填充所需的城市。
我目前在俄亥俄州的新奥尔巴尼。 Apple的Weather应用程序正确显示:
但是,在使用CoreLocation
时,我将收到俄亥俄州的哥伦布市。
这是我当前位置的地图(New Albany),显示了与哥伦布,OH的距离:
当我print
收到CLPlacemark
时,我会收到以下信息:
7070 Bayton Pl,
7070 Bayton Pl, New Albany, OH 43054, United States
@ <+40.10695990,-82.82727340> +/- 100.00m,
region CLCircularRegion (identifier:'<+40.10795920,-82.82855810> radius 296.54', center:<+40.10795920,-82.82855810>, radius:296.54m)
注意 - 上述CLPlacemark
有点不准确,因为地址不是我的地址。
但是,当我print
CLPlacemark
locality
时,我会收到以下信息:
Columbus
我的CLLocationManager
配置如下:
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
locationManager.distanceFilter = 3000
当我确定用户已获得授权的位置服务时,我致电:
locationManager.startUpdatingLocation()
无论我如何配置CLLocationManager
,我永远不会返回New Albany作为locality
。我甚至尝试将CLLocationManager
的{{1}}设置为desiredAccuracy
以查看是否有帮助,但事实并非如此。
我做错了什么导致我收到哥伦布而不是新奥尔巴尼?
更新1
我尝试了下面的解决方案,但它不可靠,因为包含城市,州和邮政编码的kCLLocationAccuracyBestForNavigation
有时位于第一,第二或第三个索引,具体取决于地址。
我是否需要获取String
,使用addressDictionary
获取值数组,然后手动解析城市?
更新2
我打印了返回的FormattedAddressLines
,这就是我收到的内容:
CLPlacemark
很明显,Optional([AnyHashable("Street"): 7070 Bayton Pl, AnyHashable("ZIP"): 43054, AnyHashable("Country"): United States, AnyHashable("SubThoroughfare"): 7070, AnyHashable("State"): OH, AnyHashable("Name"): 7070 Bayton Pl, AnyHashable("SubAdministrativeArea"): Franklin, AnyHashable("Thoroughfare"): Bayton Pl, AnyHashable("FormattedAddressLines"): <__NSArrayM 0x618000053fe0>(
7070 Bayton Pl,
New Albany, OH 43054,
United States
)
, AnyHashable("City"): Columbus, AnyHashable("CountryCode"): US, AnyHashable("PostCodeExtension"): 8120])
字典中的城市值New Albany与FormattedAddressLines
的{{1}}值CLPlacemark
不匹配。
更新3
以下是检索当前位置的整个对象:
locality