【发布时间】:2014-05-17 02:46:59
【问题描述】:
我正在尝试测试 Apple 的正向地理编码服务的准确性,以涵盖我们数据模型中的纬度/经度丢失或无效但我们仍然知道物理地址的罕见情况。 Monotouch 提供了CLGeocoder.GeocodeAddress(String, CLGeocodeCompletionHandler) 和GeocodeAddressAsync(String),但是当我调用它们时,completionHandler 永远不会被调用,并且异步方法永远不会返回。
我的应用程序日志中没有任何内容表明存在问题,并且将调用包含在 try-catch 块中并没有出现任何异常。地图集成在项目选项中启用。缺少捕获网络流量(无论如何可能是 SSL)我没有想法。
这是加载地标并尝试对地址进行地理编码的代码:
private void ReloadPlacemarks()
{
// list to hold any placemarks which come back with empty/invalid coordinates
List<ServiceCallWrapper> geoList = new List<ServiceCallWrapper> ();
mapView.ClearPlacemarks ();
List<MKPlacemark> placemarks = new List<MKPlacemark>();
if (serviceCallViewModel.ActiveServiceCall != null) {
var serviceCall = serviceCallViewModel.ActiveServiceCall;
if (serviceCall.dblLatitude != 0 && serviceCall.dblLongitude != 0) {
placemarks.Add (serviceCall.ToPlacemark ());
} else {
// add it to the geocode list
geoList.Add (serviceCall);
}
}
foreach (var serviceCall in serviceCallViewModel.ServiceCalls) {
if (serviceCall.dblLatitude != 0 && serviceCall.dblLongitude != 0) {
placemarks.Add (serviceCall.ToPlacemark ());
} else {
//add it to the geocode list
geoList.Add (serviceCall);
}
}
if (placemarks.Count > 0) {
mapView.AddPlacemarks (placemarks.ToArray ());
}
if (geoList.Count > 0) {
// attempt to forward-geocode the street address
foreach (ServiceCallWrapper s in geoList) {
ServiceCallWrapper serviceCall = GeocodeServiceCallAddressAsync (s).Result;
mapView.AddPlacemark (serviceCall.ToPlacemark());
}
}
}
private async Task<ServiceCallWrapper> GeocodeServiceCallAddressAsync(ServiceCallWrapper s)
{
CLGeocoder geo = new CLGeocoder ();
String addr = s.address + " " + s.city + " " + s.state + " " + s.zip;
Console.WriteLine ("Attempting forward geocode for service call UID: " + s.call_uid + " with address: " + addr);
//app hangs on this
CLPlacemark[] result = await geo.GeocodeAddressAsync(addr);
//code updating latitude and longitude (omitted)
return s;
}
【问题讨论】:
标签: c# xamarin.ios xamarin async-await core-location