iOS 5,正在等待定位
我有这种方法来定位用户,然后根据他所在的国家更改一些号码:iOS 5,正在等待定位,ios,cllocationmanager,Ios,Cllocationmanager,我有这种方法来定位用户,然后根据他所在的国家更改一些号码: - (void) localizing { locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; [locationManager startUpdatingLocation]; locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers; Db
- (void) localizing {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager startUpdatingLocation];
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
DbOperations *dbOp = [[DbOperations alloc] init];
geoCoder = [[CLGeocoder alloc] init];
[self.geoCoder reverseGeocodeLocation: locationManager.location completionHandler:
^(NSArray *placemarks, NSError *error) {
//Get nearby address
CLPlacemark *placemark = [placemarks objectAtIndex:0];
//String to hold address
countryCode = [placemark.addressDictionary valueForKey:@"CountryCode"];
country = [placemark.addressDictionary valueForKey:@"Country"];
NSString *s2 = NSLocalizedString(@"You're currently in %@", nil);
lblLocation.text = [NSString stringWithFormat:s2, self.country];
[dbOp UsefulNumbers:self.countryCode];
NSUserDefaults *loc = [NSUserDefaults standardUserDefaults];
[loc setObject:country forKey:@"Country"];
[loc setObject:countryCode forKey:@"CountryCode"];
[loc synchronize];
}];
[locationManager stopUpdatingLocation];
NSUserDefaults *loc = [NSUserDefaults standardUserDefaults];
if ([loc objectForKey:@"Country"] == NULL) {
btnUno.enabled = NO;
btnDue.enabled = NO;
btnTre.enabled = NO;
lblLocation.text = NSLocalizedString(@"Unable to locate you", nil);
}
}
该方法由“viewDidLoad”方法调用,但在我第一次运行应用程序时,我找不到该方法。
如果我打开地图,让它得到修复,然后打开我的应用程序,一切都会好起来。
我想也许我没有给这个应用足够的时间来获得GPS定位,或者我只是做错了
有什么建议吗
编辑:已修改代码,尚未工作
- (id) init {
self = [super init];
if (self != nil) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
}
return self;
}
- (void) viewDidLoad {
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
[locationManager startUpdatingLocation];
[super viewDidLoad];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
DbOperations *dbOp = [[DbOperations alloc] init];
geoCoder = [[CLGeocoder alloc] init];
[self.geoCoder reverseGeocodeLocation: locationManager.location completionHandler:
^(NSArray *placemarks, NSError *error) {
//Get nearby address
CLPlacemark *placemark = [placemarks objectAtIndex:0];
//String to hold address
countryCode = [placemark.addressDictionary valueForKey:@"CountryCode"];
country = [placemark.addressDictionary valueForKey:@"Country"];
NSString *s2 = NSLocalizedString(@"You're currently in %@", nil);
lblLocation.text = [NSString stringWithFormat:s2, self.country];
[dbOp UsefulNumbers:self.countryCode];
NSUserDefaults *loc = [NSUserDefaults standardUserDefaults];
[loc setObject:country forKey:@"Country"];
[loc setObject:countryCode forKey:@"CountryCode"];
[loc synchronize];
NSLog(@"Country: %@", country);
}];
NSUserDefaults *loc = [NSUserDefaults standardUserDefaults];
if ([loc objectForKey:@"Country"] == NULL) {
btnUno.enabled = NO;
btnDue.enabled = NO;
btnTre.enabled = NO;
lblLocation.text = NSLocalizedString(@"unable to locate", nil);
}
}
方法locationManager:didUpdateToLocation:fromLocation未被调用。您应该将反向地理编码的代码放入CLLocationManager的委托方法中:
–locationManager:didUpdateToLocation:fromLocation:
当前安装程序正在尝试在从位置管理器发送更新之前对位置进行反向地理编码
考虑在init方法中设置
CLLocationManager
,然后等待调用委托,然后再尝试对任何内容进行反向地理编码 好的,我已经分配了CLLocationManager实例,并在init方法中将委托设置为self。然后,在viewDidLoad中,我开始更新位置,在-locationManager:didUpdateToLocation:fromLocation方法中,我放置了所有反向地理编码代码。我正在模拟器和DidUpdateLocation上尝试应用程序。。。方法根本不会被调用。我不确定是否要使用模拟器进行位置更新。有一种方法可以为位置指定GPX文件,但在设备上进行测试可能会更幸运。看看模拟骑自行车或驾车旅行的模拟器选项。我曾尝试将模拟器GPS设置为“高速公路驾驶”,但仍然不起作用。无论如何,用户在使用此应用程序时不会移动。我只需要知道用户在哪个国家/地区从DB(如警察、救护车、消防Dpt等)获取一些号码。无论移动情况如何,当调用委托方法时,您应该仍然能够从CLLocationManager
获取位置。您是否在适当的方法中添加了断点以查看问题所在?i、 e:没有更新,或者来自地理编码器的错误结果等等?好的,多亏了你的提示,我找到了一个例子,并且我能够修复我的代码。非常感谢。