Я относительно новый разработчик iOS, и я имею дело с обработчиком завершения геокодера, я не понимаю, как обновить переменную с адресом, найденным геокодером, и сделать с ним что-то. В двух словах, я хочу, чтобы блок геокодера перестал использовать информацию в каком-то методе.
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"didUpdateToLocation: %@", newLocation);
CLLocation *currentLocation = newLocation;
if (currentLocation != nil) {
longitudeLabel = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
latitudeLabel = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
}
[locationManager stopUpdatingLocation];
// Reverse Geocoding
NSLog(@"Resolving the Address");
__block NSString * **annotation**;
[geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
if (error == nil && [placemarks count] > 0) {
placemark = [placemarks lastObject];
NSLog(@"location %@",addressLabel);*/
**annotation**=[NSString stringWithFormat:@" %@, %@, %@",
placemark.locality,
placemark.administrativeArea,
placemark.country];
}
} ];
NSLog(@"location %@",annotation);
NSString *text = self.toPostCell.postText.text;
UIImage *image = self.toPostCell.selectedImage.image;
[Persistence addPostToServerAddtext:text addimage:image addbeach:nil **location:annotation**];
[NSThread sleepForTimeInterval:5.0];
self.posts = [Persistence getPostsUpTo: self.cantPosts forBeach:nil];
imageLoaded = NO;
[self.tableView reloadData];
}
Я попробовал основную очередь отправки, и я не могу получить аннотацию и использовать ее в методе, после глубокого поиска в Интернете я немного запутался в потоках, очередях и порядке их выполнения. При запуске метода выдается исключение EXC_BAD_ACCESS при регистрации аннотации после блока....
didUpdateToLocation
, является точным. На практике при использовании устройства (а не симулятора) часто требуется несколько вызовов методаCLLocationManagerDelegate
со все меньшими и меньшими значениямиhorizontalAccuracy
(т. к определенному GPS местоположению). Возможно, это первое возвращенное местоположение достаточно точно для ваших целей, но я рекомендую вам протестировать ваше приложение на устройстве в реальных сценариях, чтобы убедиться в этом. - person Rob   schedule 19.11.2013