2016-11-08 4 views
0

내 앱에서 사용자 국가를 확인한 다음이를 기반으로 알림을 표시해야합니다. AppDelegate에 파일에서, 나는 didFinishLaunchingWithOptions에 있습니다iOS는 국가 사용자에 따라 경고를 표시합니다.

self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 
    //Here you set the Distance Filter that you need 
    self.locationManager.distanceFilter = kCLDistanceFilterNone; 
    // Here you set the Accuracy 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
    [self.locationManager startUpdatingLocation]; 

그런 다음 대리자에 대한 I이 있습니다. 작동하지만 알림은 계속해서 다시 나타납니다. 어떻게하면 이걸 한 번만 실행할 수 있습니까?

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    NSLog(@"Running"); 
    CLLocation *newLocation = [locations lastObject]; 

    CLGeocoder *reverseGeocoder = [[CLGeocoder alloc] init]; 

    [reverseGeocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) 
    { 


     CLPlacemark *myPlacemark = [placemarks objectAtIndex:0]; 
     NSString *countryCode = myPlacemark.ISOcountryCode; 
     NSString *countryName = myPlacemark.country; 
     NSLog(@"My country code: %@ and countryName: %@", countryCode, countryName); 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     if ([countryName isEqualToString:@"Thailand"]) { 
      [defaults setBool:NO forKey:@"TestMode"]; 
      [defaults synchronize]; 
     } 
     else { 
      [defaults setBool:YES forKey:@"TestMode"]; 
      [defaults synchronize]; 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Test Mode" message:@"Currently, live distribution is limited to the country of Thailand. You may still use the app in 'Test Mode' to store distribution data on your machine. When your country is added, you will have the option to upload it to our server." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
      [alert show]; 
     } 

    }]; 




} 

답변

0

bool 값을 가져옵니다. 처음으로 거짓이어야합니다. 그런 다음 코드를이 코드로 바꿉니다. 위치에 대한 업데이트를이 위치 업데이트를 얻을 때마다 보낼 수있는 위치 관리자를 말한다 대신 사용

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    NSLog(@"Running"); 
    CLLocation *newLocation = [locations lastObject]; 
    [manager stopUpdatingLocation]; 

    CLGeocoder *reverseGeocoder = [[CLGeocoder alloc] init]; 
    [reverseGeocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) 
    { 


     CLPlacemark *myPlacemark = [placemarks objectAtIndex:0]; 
     NSString *countryCode = myPlacemark.ISOcountryCode; 
     NSString *countryName = myPlacemark.country; 
     NSLog(@"My country code: %@ and countryName: %@", countryCode, countryName); 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     if ([countryName isEqualToString:@"Thailand"]) { 
      [defaults setBool:NO forKey:@"TestMode"]; 
      [defaults synchronize]; 
     } 
     else { 
      [defaults setBool:YES forKey:@"TestMode"]; 
      [defaults synchronize]; 

       if(boolvar == false){ 
       boolvar = true 

      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Test Mode" message:@"Currently, live distribution is limited to the country of Thailand. You may still use the app in 'Test Mode' to store distribution data on your machine. When your country is added, you will have the option to upload it to our server." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
      [alert show]; 
     } 
} 
    }]; 

} 
+0

나는 당신의 boolvar = true 코드 라인에 엉망이 될 수 있다고 생각한다. – user717452

+0

경고를 표시하기 전에 bool 변수가 false인지 확인한 후 경고를 표시해야한다. 처음으로 거짓이 될 것이고 사실로 설정하면 다시 경고를 나타내지 않을 것입니다. – User511

+0

맞습니다.이 답변의 코드가 형식을 편집해야한다고 말하면서 간단히 'boolvar = true;'라고 말하면서 boolvar를 설정할 수 없습니다. – user717452

1

...

[self.locationManager startUpdatingLocation]; 

는 ... 왜 사용하지 않는 :

[self.locationManager requestLocation]; 

위치 관리자가받는 첫 번째 위치 만 사용자에게 알려줍니다.

+0

현재 응용 프로그램과 충돌하여 사용하는 대리자 메서드는 무엇입니까? – user717452

+0

설명서를 참조하십시오. https://developer.apple.com/reference/corelocation/cllocationmanager/1620548-requestlocation?language=objc (위임 방법은 다음과 같습니다. locationManager : didUpdateLocations : ) –

+0

코드에서 그것? 업데이트 된 코드를 게시 할 수 있습니까? 오류 로그를 게시 할 수 있습니까? –