2014-07-23 3 views
1

사용자가 Game Center에 로그인하면 이미 앱이 원활하게 실행되지만 사용자가 로그인하지 않은 경우 시작시 앱이 이미 다운됩니다. '응용 프로그램 모달 뷰 컨트롤러를 제공하기 위해 노력 : 종료 응용 프로그램으로 인해 캐치되지 않는 예외'NSInvalidArgumentException ', 이유에 : -Expected 동작은 사용자가 이미사용자가 이미 로그인하지 않은 경우 게임 센터 인증에 충돌이 발생합니다.

이 로그인하지 않은 경우 게임 센터에 로그인하라는 메시지가 오류 메시지입니다 것입니다 그 자체. 프리젠 테이션 컨트롤러가 있습니다. ' 우선 투사 호출 스택 : (0x30496ecb 0x3ac31ce7 0x32db01db 0x3049a414 0x303e4967 0x32f8e71b 0x310b906d 0x3049a414 0x303e4967 0x3b11ad53 0x3b11ad3f 0x3b11d6c3 0x30461641 0x3045ff0d 0x303ca729 0x303ca50b 0x353396d3 0x32d2b871 0x10d05d 0x3b12fab7) 의 libC++ abi.dylib : NSException

형 캐치되지 제외 종료

이 사용자를 인증하는 코드입니다.

- (void)authenticateLocalUser { 
    if (!gameCenterAvailable) return; 
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 
    if (SYSTEM_VERSION_LESS_THAN(@"6.0")) { 
     NSLog(@"..."); 
    } else { 
     // ios 6.0 and above 
     [localPlayer setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) { 
      if (!error && viewcontroller) { 
       [viewcontroller presentViewController:viewcontroller animated:YES completion:nil]; 

      } 
      else { 
       [self checkLocalPlayer]; 
      } 
     })]; 
    } 
} 

EDIT- 세부 정보입니다.

답변

1

EDUsta 리드 나에게 맞습니다. 열쇠는 다음과 같이 사용했습니다 : [[UIApplication sharedApplication] keyWindow].rootViewController

- (void)authenticateLocalUser { 
    if (!gameCenterAvailable) return; 



    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 
    if (SYSTEM_VERSION_LESS_THAN(@"6.0")) { 
     NSLog(@"There is no system version less than 6.0, just upgrade you guys."); 
    } else { 
     // ios 6.0 and above 

     [localPlayer setAuthenticateHandler:(^(UIViewController* ViewController, NSError *error) { 
      if (!error && ViewController) { 
       [[[UIApplication sharedApplication] keyWindow].rootViewController presentViewController:ViewController animated:YES completion:nil]; 
       NSLog(@"aAAAAAAAAAA");   } 
      else { 
       [self checkLocalPlayer]; 
      } 
     })]; 
    } 
} 
1

"응용 프로그램이 모달보기 컨트롤러를 표시하려고했습니다."라는 오류 메시지가 나타납니다. "viewcontroller"에 "viewcontroller"를 표시하려고합니다.

[viewcontroller presentViewController:viewController...]; 

이 코드는 UIViewController 클래스에 속해 있다고 생각합니다.

[self presentViewController:viewcontroller animated:YES completion:nil]; 

트릭을해야합니다.

+0

컴파일되지 않습니다. 빨간색 오류 msg : GameCenterFiles의 표시되지 않는 @interface가 selector 'presentViewController : animated : completion :'을 선언합니다. – user3695947

+0

presentViewController : 메시지를 현재보기 컨트롤러로 보내야합니다. 예를 들어 내비게이션 컨트롤러를 사용중인 경우; UIViewController * currentViewController = self.navigationController.visibleViewController; [currentViewController presentViewController : viewcontroller animated : 예 완료 : 없음]; – EDUsta

+0

감사합니다. 힌트가 도움이되었습니다. 나는 [[[UIApplication sharedApplication] keyWindow]를 사용했다. .rootViewController presentViewController : viewcontroller animated : 예 완료 : 없음]; – user3695947

관련 문제