Tag: 逆向地理编码

在单例类(ARC)中使用MKReverseGeocoder

我正在尝试为天气function(全部包含)创build单例类,以便我可以在单个分配的对象中更改/更新/调用整个应用程序中的天气数据。 我有它的工作,除了一个小奇怪的错误。 我在运行iOS <5的设备上使用MKReverseGeocoder。CLGeocoder在iOS 5+上运行良好。 基本上,这是在应用程序中发生的事情: 在应用程序委托中,在启动时,我创build了我的天气单件的共享实例。 除非有UIView需要报告天气结果,否则这个实例什么也不做。 当加载报告天气的视图时,如果该位置尚未在首选项中静态设置,则该应用会尝试拉取当前位置。 这工作,我可以logging设备的当前位置的坐标。 在完成之后,我立即进入试图扭转这些坐标的地理定位。 方法MKReverseGeocoder开始得到执行,我可以logging该实例的isQuerying属性是真实的,所以我知道它正试图地理定位的coords。 (是的,我将代理设置为我的共享实例,实例的types为MKReverseGeocoderDelegate)。 现在这是奇怪的部分。 如果我第一次启动应用程序,并且第一次向屏幕添加天气UIView,则MKReverseGeocoder将启动,但不会调用委托方法。 如果我然后closures应用程序并再次打开它(第二次),当前的位置获取的查找,MKReverseGeocoder调用委托方法和一切工作。 它只是不想在第一次启动时工作,无论我多次调用它(我有一个可以启动查找的button)。 这完全是莫名其妙的 iOS 5 CLGeocoder在初次启动以及随后的每次启动时均可正常工作。 MKReverseGeocoder在初次启动时不起作用(因为它不调用委托方法),但是在后续的启动中。 以下是相关的代码: -(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{ NSLog(@"error getting location:%@", error); self.reverseGeocoder = nil; [[NSNotificationCenter defaultCenter] postNotificationName:@"errorGettingLocation" object:nil userInfo:[NSDictionary dictionaryWithObject:error forKey:@"error"]]; } – (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)pm { //update placemark and get weather from correct […]