Я неоднократно нажимал на эту ошибку и не мог понять, как ее остановить;но в конце концов я нашел способ обойти всю проблему, которая работает довольно хорошо и требует чуть больше работы: вообще не используйте MKReverseGeocoder
от Apple - вместо этого напрямую вызовите API обратного геокодирования Google (это, очевидно, тот же сервис, который MKReverseGeocoder
делает за кадром).Вы можете вернуть либо JSON, либо XML (ваши предпочтения), которые вам затем придется проанализировать, но это не так уж сложно.
Например, поскольку мое приложение использует ASIHTTPRequest
, это то, чтоэто выглядит так (хотя это также было бы легко сделать с помощью нативных API Apple, таких как NSURLConnection
):
#pragma mark -
#pragma mark CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
// Be careful: My code is passing sensor=true, because I got the lat/long
// from the iPhone's location services, but if you are passing in a lat/long
// that was obtained by some other means, you must pass sensor=false.
NSString* urlStr = [NSString stringWithFormat:
@"http://maps.googleapis.com/maps/api/geocode/xml?latlng=%f,%f&sensor=true",
newLocation.coordinate.latitude, newLocation.coordinate.longitude];
NSURL* url = [NSURL URLWithString:urlStr];
self.reverseGeocoderRequest = [ASIHTTPRequest requestWithURL:url];
self.reverseGeocoderRequest.delegate = self;
[self.reverseGeocoderRequest startAsynchronous];
}
Кстати, у API Google есть правила, как и у Apple.Обязательно прочитайте документы, особенно касающиеся квот.