2012-06-13 56 views
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不會被調用。

回答

2

你應該把你的代碼反向地理編碼的委託方法CLLocationManager:

– locationManager:didUpdateToLocation:fromLocation:

您當前的設置是嘗試之前更新已經從位置經理派往反向地理的位置。

考慮在init方法中設置CLLocationManager,然後在嘗試反向地理編碼之前等待委託被調用。

+0

好的,所以我已經分配了CLLocationManager實例,並在我的init方法中將委託設置爲self。然後,在viewDidLoad中,我開始更新位置,並在-locationManager:didUpdateToLocation:fromLocation方法中放入所有反向地理編碼代碼。我正在嘗試模擬器上的應用程序,並且didUpdateToLocation ...方法根本沒有被調用。 – Aleph72

+0

我不確定使用模擬器進行位置更新。有一種方法可以指定GPX文件的位置,但您可能會在設備上進行更多運氣測試。看看用於模擬騎自行車或汽車旅程的模擬器選項。 – CaptainRedmuff

+0

我試圖將模擬器GPS設置爲'Freeway drive',但它仍然不起作用。無論如何,用戶不會在使用這個應用程序時移動。我只需要知道用戶在哪個國家從數據庫中獲取一些數字(如警察,救護車,火災Dpt等)。 – Aleph72