- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先我有一个全局变量:
var userCity : String?
使用reverseGeocodeLocation()从用户位置获取城市名称,我尝试将该城市名称信息存储到userCity全局变量中。我知道您不能简单地从异步任务返回数据。相反,你必须通过一个 block 传回。这是我在查看其他 StackOverflow 帖子后得到的信息:
//get user's location
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[locations.count - 1]
if location.horizontalAccuracy > 0 {
locationManager.stopUpdatingLocation()
locationManager.delegate = nil
reverseCoordinatesToCity(location: location) { (city) in
self.userCity = city
}
}
}
func reverseCoordinatesToCity(location: CLLocation, completion: @escaping (_ city: String?) -> Void) {
CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
if (error != nil) {
print("Reverse geocoder failed with an error: " + (error?.localizedDescription)!)
completion("")
} else if (placemarks?.count)! > 0 {
let pm = placemarks![0] as CLPlacemark
completion(pm.locality!)
} else {
print("Problems with the data received from geocoder.")
completion("")
}
})
}
当我尝试以不同的方法打印 userCity 时。例如:
func someFunction() {
print(userCity!)
}
没有打印出任何内容,并且 userCity 似乎为零。我花了将近三个小时试图弄清楚这一点。我的主要目标是使用 segue 将这些数据传递到另一个 ViewController 上。
感谢任何帮助。谢谢。
最佳答案
正如 @rmaddy 所说,当 city
准备就绪时,您不会使用它。解决这个问题的方法是将 View Controller 逻辑与 CLGeocoder
回调连接起来。如果您不想再使用位置管理器,也值得将其设置为nil
,因为stopUpdatingLocations()
并不总是停止位置更新。
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[locations.count - 1]
if location.horizontalAccuracy > 0 {
locationManager.stopUpdatingLocation()
locationManager.delegate = nil
locationManager = nil //this makes sure you don't get more updates
reverseCoordinatesToCity(location: location)
}
}
func reverseCoordinatesToCity(location: CLLocation) {
CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
if (error != nil) {
print("Reverse geocoder failed with an error: " + (error?.localizedDescription)!)
} else if (placemarks?.count)! > 0 {
let pm = placemarks![0] as CLPlacemark
city = pm.locality!
//use city here with your view controllers
} else {
print("Problems with the data received from geocoder.")
}
})
}
关于ios - 如何存储从reverseGeocodeLocation()方法(异步任务)检索的数据(到全局变量中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52267650/
我在使用 reverseGeocodeLocation 时遇到了一些奇怪的问题。这就是我所做的。 我从一个 view controller 推送到另一个。 View 出现后,我要求当前位置。在 did
关于抓取位置,iOS 模拟器经常不工作是否正常?每当我运行模拟器时,这个应用程序的项目都会在 50% 的时间内崩溃……但我似乎无法在代码本身中查明问题。如果问题确实出在代码本身,谁能帮我找到问题所在?
我的应用程序是基于地理位置的应用程序,tableview 中的每个条目都有条目的位置。我发现奇怪的是,当用户来自美国以外时,该位置是用他们的语言写的。例如,有一位来自越南的用户,地址是用越南语写的。我
这是我正在使用的代码。我不确定应该将哪些变量传递到完成处理程序中。我查看的所有其他帖子都说要传递“地标”和“错误”,但我遇到了警告和错误。 func locationManager(manager:
如果网络不可用,我在尝试对位置进行反向地理编码时看到奇怪的结果: 在 iOS 5.0.1 上看到 开启飞行模式 [geocoder reverseGeocodeLocation:whatever co
我有一个坐标数组,我使用 for 循环遍历这些坐标。我想在 map 上为每个位置放置注释,并将标注的副标题作为坐标的地址,通过使用 reverseGeocodeLocation 在 for 循环中,我
我从 Xcode 的方案中启用位置模拟检查 Allow Location Simulation 并从下拉列表中选择示例位置 - New York, NY, USA。 这是我从位置获取地点信息的代码。c
我在 iPhone 上使用 CLLocationManager 获取当前用户位置,然后使用 reverseGeocodeLocation 将位置转换为地址。 这工作正常,但结果以设备语言返回,我需要它
编辑解决方案:因为我怀疑 reverseGeocodeLocation 是异步的所以我不得不使用 dispatch_async( dispatch_get_main_queue
对于两个不同的坐标系,我无法从 CLGeocoder reverseGeocodeLocation 获得相同的结果。例如。 CLLocation *tempLocation = [[CLLocatio
我的 iPhone 应用程序应该根据用户的纬度和经度解析地址。reverseGeocodeLocation 工作正常,但结果是英文的。 有没有办法将结果本地化为其他语言? 无法在 apple 或其他任
这是我的代码和我尝试调用 reverseGeocodeLocation 的完整上下文: CLLocationCoordinate2D touchMapCoordinate = [self.mapVie
我正在使用 Corelocation 并更新基本的 long、lat 等以每秒查看尽可能多的 View ,这就是我想要的,但我现在引入了 reverseGeocodeLocation,我只希望它运行一
我想检测用户何时前往新国家/地区,因此打算将 startMonitoringSignificantLocationChanges: 与 reverseGeocodeLocation: 结合使用。 但是
我是 Swift 开发的新手。我刚刚将现有的工作代码转换为 swift2,同时从 6 更新 Xcode 7。 private func decodeLocation(array: [AnyOb
我模拟了一个外国位置,并使用了CLGeocoder reverseGeocodeLocation(_ location:, completionHandler:),但是我得到了一个错误- [Clien
我想编写一个函数来对位置进行反向地理编码并将结果字符串分配给一个变量。正在关注this发布我有这样的东西: extension CLLocation { func reverseGeocode
问题是completionHandler block 中的代码永远不会运行;我使用了断点,程序会在构建模式下跳过完成处理程序 block 下面是 PinALandPlaceMark 中使用的两个函数,
我正在开发具有反向地理编码功能的 iOS 应用程序。当我第一次调用该函数时,一切都很好。第二次调用后(使用完成调用的 Controller 的新实例)出现“Domain=kCLErrorDomain
我想做的是将 CLLocation 传递给函数 getPlacemarkFromLocation,然后函数通过 reverseGeocodeLocation 使用传递的 CLLocation 设置将返
我是一名优秀的程序员,十分优秀!