2013-06-04 4 views
0

Я использую этот код, чтобы получить Местоположение, используя симулятор, но его не дает мне никакого выхода. также, если кто-то предложить мне решение этого или лучше альтернативное решение. \locationManager не обновляет местоположение

-(void)viewDidAppear:(BOOL)animated 
{ 
_locationManager.delegate=self; 
[_locationManager startUpdatingLocation]; 
[self.geoCoder reverseGeocodeLocation: _locationManager.location completionHandler: 
^(NSArray *placemarks, NSError *error) { 
     if (error) { 
     return; 
    } 

    if (placemarks && placemarks.count > 0) 
    { 
     CLPlacemark *placemark = placemarks[0]; 

     NSDictionary *addressDictionary = 
     placemark.addressDictionary; 

     NSString *address = [addressDictionary 
     objectForKey:(NSString *)kABPersonAddressStreetKey]; 
     NSString *city = [addressDictionary 
          objectForKey:(NSString *)kABPersonAddressCityKey]; 
     NSString *state = [addressDictionary 
          objectForKey:(NSString *)kABPersonAddressStateKey]; 
     NSString *zip = [addressDictionary 
          objectForKey:(NSString *)kABPersonAddressZIPKey]; 

     NSString *Countrynsme = [addressDictionary 
            objectForKey:(NSString *)kABPersonAddressCountryKey]; 

     _requestorAddressText.Text = address; 
     _requestorCityText.text = city; 
     _requestorPostalText.text = zip; 
     _CountryrequestorText.text = Countrynsme; 
     _requestorStateText.text = state; 
     } 

    }]; 

[_locationManager stopUpdatingLocation]; 
} 

ответ

3

CLLocationManager асинхронный API. Перед геокодированием местоположения вам нужно подождать результат CLLocationManager.

Начала прослушивания для определения местоположения обновлений менеджера с помощью CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    NSTimeInterval interval = [newLocation.timestamp timeIntervalSinceNow]; 
    if (interval < 0) { 
     interval = -interval; 
    }   
    // Reject stale location updates. 
    if (interval < 30.0) { 
     // Start geocoding 
     [geoCoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { 
      // Use geocoded results 
      ... 
     }]; 
    } 
    // If you're done with getting updates then do [manager stopUpdatingLocation] 
} 

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { 
    // Handle error. Perhaps [manager stopUpdatingLocation] 
} 

Тогда viewDidAppear просто самозагрузок это поиск местонахождения:

- (void)viewDidAppear { 
    // PS: You're missing a call to [super viewDidAppear] 
    [super viewDidAppear]; 
    // Start lookup for location 
    _locationManager.delegate=self; 
    [_locationManager startUpdatingLocation]; 
} 

PS: В dealloc не забудьте остановить обновление местоположения, отменить геокод и nil делегатам для locationManager.

Смежные вопросы