2017-11-24 22 views
1

나는 사과 시계 응용 프로그램을 개발 중입니다. 전경에서 응용 프로그램이 잘 작동되면 [WCSession defaultSession].isReachableON 상태를 검색합니다. 이제 시계 응용 프로그램이 백그라운드 모드로 전환되면 문제가 발생합니다.Watch App : [WCSession defaultSession] .isReachable은 백그라운드 앱에서 항상 'FALSE'상태를 검색하나요?

이 문제를 해결하는 방법은 무엇입니까? 백그라운드 모드에서 ON 상태를 검색하십시오.

내 코드는 다음과 같습니다.

- (void)willActivate { 

    [super willActivate]; 

    self.locationManager = [[CLLocationManager alloc] init]; 
    [self.locationManager setDelegate:self]; 
    [self.locationManager requestLocation]; 


    if ([WCSession isSupported]) { 
     WCSession *session = [WCSession defaultSession]; 
     session.delegate = self; 
     [session activateSession]; 
    } 

    if ([[WCSession defaultSession] isReachable]) { 
     NSLog(@"Session Reachable"); 
    } else { 
     NSLog(@"Session Not Reachable"); 

    } 

    if([WCSession defaultSession].iOSDeviceNeedsUnlockAfterRebootForReachability) { 

     WKAlertAction *action = [WKAlertAction actionWithTitle:@"OK" 
                style:WKAlertActionStyleDefault 
                handler:^{ 
                }]; 

     NSString *title = @"My App"; 
     NSString *message = @"Reachability in the Watch app requires the paired iOS device to have been unlocked at least once after reboot"; 
     [self presentAlertControllerWithTitle:title message:message preferredStyle:WKAlertControllerStyleAlert actions:@[action]]; 
    } 

    if ([[WCSession defaultSession] isReachable]) { 
     NSString *strUserId = [[NSUserDefaults standardUserDefaults] 
          stringForKey:@"user_id"]; 
     if ([strUserId isEqualToString:@""]) 
     { 
      WKAlertAction *act = [WKAlertAction actionWithTitle:@"OK" style:WKAlertActionStyleCancel handler:^(void){ 
      NSLog(@"ALERT YES "); 
      }]; 

      NSArray *testing = @[act]; 

      [self presentAlertControllerWithTitle:@"My App" message:@"You are not login" preferredStyle:WKAlertControllerStyleAlert actions:testing]; 

     }else{ 
      [self addTrackingdata]; 
      [self loadPairList]; 
     } 
    } 


    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(UpdateData) name:@"refreshData" object:nil]; 


    ExtensionDelegate *del = (ExtensionDelegate *)[WKExtension sharedExtension].delegate; 
    if (del.strReminderTime == 0 && del.isTimerFlag) { 
     [self UpdateData]; 
     isReminderFlag = NO; 
     del.isTimerFlag = NO; 
     NSTimer * CheckTimer = [NSTimer scheduledTimerWithTimeInterval:10.0f target:self selector:@selector(CheckConnectation) userInfo:nil repeats:YES]; 
     [CheckTimer fire]; 
    } 



} 

- (void)CheckConnectation 
{ 
    WCSession *session = [WCSession defaultSession]; 
    if([WCSession isSupported]) { 
     session.delegate = self; 
     [session activateSession]; 
    } 

    if([WCSession defaultSession].isReachable){ 
     [_lblPairedStatus setText:@"connected"]; 
    } 
    else 
    { 
     [_lblPairedStatus setText:@"disconnected"]; 
    } 
} 

제안이나 아이디어가 있으면 감사드립니다.

답변

0

방금 ​​비슷한 문제가있었습니다. 나를위한 해결책은 willActivate 대신 didAppear 함수에서 isReachable을 확인하는 것이 었습니다.

+0

did didear에서 사용했지만 백그라운드 모드에서는 작동하지 않습니다. –