Попытка геокодировать адрес и получить kCLErrorGeocodeFoundNoResult
Поэтому я пытаюсь GeoCode адрес, и когда кто-то вводит "asdfsfdsf", он выдает ошибку
"kCLErrorGeocodeFoundNoResult"
Как я могу поймать ошибку, чтобы она не показывала уродливое всплывающее окно (то есть с ошибкой выше) пользователю?
-(void)geocodePinAddress:(NSString *)address withBlock:(void (^)(CLLocationCoordinate2D coord))block {
CLGeocoder* gc = [[CLGeocoder alloc] init];
__block CLLocationCoordinate2D coord;
[gc geocodeAddressString:address completionHandler: ^(NSArray *placemarks, NSError *error) {
// Check for returned placemarks
if (placemarks && placemarks.count > 0) {
CLPlacemark* mark = [placemarks objectAtIndex:0];
coord = mark.location.coordinate;
block(coord);
}
}];
}
2 ответа
Решение
Here is how you can handle geocoder domain errors :
if(placemarks.count > 0)
{
CLPlacemark *placemark = [placemarks objectAtIndex:0];
self.outputLabel.text = placemark.location.description;
}
else if (error.domain == kCLErrorDomain)
{
switch (error.code)
{
case kCLErrorDenied:
self.outputLabel.text = @"Location Services Denied by User";
break;
case kCLErrorNetwork:
self.outputLabel.text = @"No Network";
break;
case kCLErrorGeocodeFoundNoResult:
self.outputLabel.text = @"No Result Found";
break;
default:
self.outputLabel.text = error.localizedDescription;
break;
}
}
Почему бы просто не показать сообщение, если произошла ошибка?
- (void)geocodePinAddress:(NSString *)address withBlock:(void (^)(CLLocationCoordinate2D coord))block {
CLGeocoder *gc = [[CLGeocoder alloc] init];
__block CLLocationCoordinate2D coord;
[gc geocodeAddressString:address completionHandler: ^(NSArray *placemarks, NSError *error) {
// if there was some error geocoding
if (error) {
// display whatever message you want, however you want, here
return;
}
// Check for returned placemarks
if (placemarks && placemarks.count > 0) {
CLPlacemark* mark = [placemarks objectAtIndex:0];
coord = mark.location.coordinate;
block(coord);
}
}];
}