- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想做的是将 CLLocation
传递给函数 getPlacemarkFromLocation
,然后函数通过 reverseGeocodeLocation 使用传递的
设置将返回的 CLLocation
CLPlacemark?
。
我在 reverseGeocodeLocation
中创建 completionHandler
闭包时遇到问题,
它引发编译器错误/崩溃:
在 Swift 中,CLGeocodeCompletionHandler
根据文档 AnyObject[]!
是 CLGeocodeCompletionHandler = (AnyObject[]!, NSError!) -> Void
> 应该像 Objective-C 版本一样包含 CLPlacemark
对象。
这是我当前的代码:
class func getPlacemarkFromLocation(location:CLLocation)->CLPlacemark?{
var g = CLGeocoder()
var p:CLPlacemark?
g.reverseGeocodeLocation(location, completionHandler: {
(placemarks, error) in
let pm = placemarks as? CLPlacemark[]
if (pm && pm?.count > 0){
p = placemarks[0] as? CLPlacemark
}
})
return p?
}
编辑:似乎错误与 placemarks.count
有关,而 placemarks
未被视为数组。它现在可以编译,但是当我试图在 completionHandler
中设置 p
时,我什么也没得到。我检查了正在传递的 CLLocation
,它们是有效的。
编辑 2:打印 placemarks
后,我可以确认它返回了数据。但是 p
仍然返回 nil。
最佳答案
我在这个线程中找到了我需要的答案:Set address string with reverseGeocodeLocation: and return from method
问题在于 reverseGeocodeLocation
是异步的,在我的示例中,该方法在 completionBlock 设置 p
之前返回一个值。
根据要求,这是我当前的代码。
func showAddViewController(placemark:CLPlacemark){
self.performSegueWithIdentifier("add", sender: placemark)
}
func getPlacemarkFromLocation(location: CLLocation){
CLGeocoder().reverseGeocodeLocation(location, completionHandler:
{(placemarks, error) in
if error {println("reverse geodcode fail: \(error.localizedDescription)")}
let pm = placemarks as [CLPlacemark]
if pm.count > 0 { self.showAddPinViewController(placemarks[0] as CLPlacemark) }
})
}
我不想采用 NSNotificationCenter 路由,因为那会增加不必要的开销,而是在 completionHandler
闭包内我调用另一个函数并传递由生成的 CLPlacemark
getPlacemarkFromLocation
作为保持异步的参数,因为该函数将在 placemarks
设置后调用,函数(应该)接收所需的地标并执行您想要的代码。希望我说的有道理。
关于ios - Swift - CLGeocoder reverseGeocodeLocation completionHandler 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345296/
我在使用 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 设置将返
我是一名优秀的程序员,十分优秀!