【发布时间】:2015-12-14 20:55:56
【问题描述】:
我正在尝试对当前位置进行反向地理编码,检索城市和州并将其保存到 CoreData 实体。在下面的代码中,一旦用户点击保存按钮,我希望进行反向地理编码并将城市和州信息保存到 Core Data。但是当我尝试执行下面的代码时,没有执行反向地理编码部分,也没有数据保存到核心数据中。我在其他线程中发现的一个指针是反向地理编码发生在一个独立的线程中,并且该函数的稍后部分在没有发生反向地理编码的情况下被启动。有人可以指导我如何解决这个问题吗?我还是iOS应用程序开发的新手,所以非常感谢详细的回复。提前致谢!
- (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做一些事情,请将代码移动到完成处理程序中。 -
我尝试按照 DeveloBär 在他的回答中建议的操作,但遇到了我的评论中描述的问题。
标签: ios objective-c core-data reverse-geocoding reversegeocodelocation