2012-06-13 3 views
1

를 기다리는 나는 그가에있어 국가에 따라 사용자를 찾은 다음 몇 가지 숫자를 변경이 방법을 가지고 :에서 iOS 5, 위치

방법은 '있는 viewDidLoad'방법하지만 난생 처음으로 전화를받을

- (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); 
} 


} 
내가 찾을 수없는 앱을 실행합니다. 지도를 열면 수정 사항을 얻은 다음 내 앱을 열면 모든 것이 잘됩니다. 어쩌면 내가 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:

현재 설정이 업데이트가 위치 관리자에서 파견되기 전에 지오에게 위치를 반대하기 위해 노력하고있다.

초기화 메소드에 CLLocationManager을 설정하고 지오 코딩을 리버스하려고 시도하기 전에 델리게이트가 호출되기를 기다리는 것이 좋습니다.

+0

자, CLLocationManager 인스턴스를 할당하고 대리자를 내 init 메서드에서 self로 설정했습니다. 그런 다음 viewDidLoad에서 위치를 업데이트하고 -locationManager에서 시작합니다. didUpdateToLocation : fromLocation 메서드 모든 역 지오 코딩 코드를 넣었습니다. 시뮬레이터에서 응용 프로그램을 시도하고 didUpdateToLocation ... 메서드가 전혀 호출되지 않습니다. – Aleph72

+0

위치 업데이트를 위해 시뮬레이터를 사용하는지 잘 모르겠습니다. 위치에 대한 GPX 파일을 지정하는 방법이 있지만 장치에서 더 많은 행운을 테스트 할 수 있습니다. 자전거 타기 또는 자동차 여행 시뮬레이션을위한 시뮬레이터 옵션을 살펴보십시오. – CaptainRedmuff

+0

시뮬레이터 GPS를 'Freeway drive'로 설정하려고했지만 여전히 작동하지 않습니다. 어쨌든,이 응용 프로그램을 사용하는 동안 사용자가 이동하지 않습니다. 나는 사용자가 DB (경찰, 구급차, 소방서 등)에서 어떤 번호를 얻는 국가인지 알 필요가 있습니다. – Aleph72