1
我有這樣的方法找到用戶,然後改變一些數字,根據他在國家:的iOS 5,等待位置
- (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實例,並在我的init方法中將委託設置爲self。然後,在viewDidLoad中,我開始更新位置,並在-locationManager:didUpdateToLocation:fromLocation方法中放入所有反向地理編碼代碼。我正在嘗試模擬器上的應用程序,並且didUpdateToLocation ...方法根本沒有被調用。 – Aleph72
我不確定使用模擬器進行位置更新。有一種方法可以指定GPX文件的位置,但您可能會在設備上進行更多運氣測試。看看用於模擬騎自行車或汽車旅程的模擬器選項。 – CaptainRedmuff
我試圖將模擬器GPS設置爲'Freeway drive',但它仍然不起作用。無論如何,用戶不會在使用這個應用程序時移動。我只需要知道用戶在哪個國家從數據庫中獲取一些數字(如警察,救護車,火災Dpt等)。 – Aleph72