Я пытаюсь сделать обратное геокодирование с текущим местоположением, получить город и состояние и сохранить его в объекте CoreData. В приведенном ниже коде, как только кнопка сохранения нажата пользователем, я ожидаю, что произойдет обратное геокодирование и сохранит информацию о городе и состоянии в Core Data. Но когда я пытаюсь выполнить код ниже, обратная часть геокодирования не выполняется и данные не сохраняются в Core Data. Один указатель, который я нашел в других потоках, заключается в том, что обратное геокодирование происходит в независимом потоке, и более поздняя часть этой функции запускается без обратного геокодирования. Может ли кто-нибудь посоветовать мне, как это сделать? Я по-прежнему новичок в разработке приложений для iOS, поэтому подробный ответ будет высоко оценен. Заранее спасибо!Как сохранить данные из обратного преобразования в CoreData в Objective-C?
- (IBAction)save:(id)sender {
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//Update current location
[self.locationManager startUpdatingLocation];
// Reverse Geocoding
NSLog(@"Resolving the Address");
[geocoder reverseGeocodeLocation:self.locationManager.location completionHandler:^(NSArray *placemarks, NSError *error)
{
NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
if (error == nil && [placemarks count] > 0) {
placemark = [placemarks lastObject];
} else {
NSLog(@"%@", error.debugDescription);
}
} ];
NSManagedObjectContext *context = [self managedObjectContext];
// Create a new device
NSManagedObject *newPlace = [NSEntityDescription insertNewObjectForEntityForName:@"Place" inManagedObjectContext:context];
[newPlace setValue:placemark.locality forKey:@"city"];
[newPlace setValue:placemark.administrativeArea forKey:@"state"];
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
'reverseGeocodeLocation' - это асинхронный вызов. Если вам нужно что-то сделать с помощью метки «placemark», переместите код в обработчик завершения. – Sulthan
Я попытался сделать то, что предложил DeveloBär ниже в своем ответе, но столкнулся с проблемой, как описано ниже в моем комментарии. – hellSigma