2016-07-11 2 views
1

새 GKGameSession을 시작하려고하는데 createSession을 사용하면 지금까지 얻을 수있는 모든 것이 nil입니다. 여기 내 코드는 다음과 같습니다.GKGameSession의 createSession이 nil만을 반환합니다.

GKGameSession.createSession(inContainer: "test", withTitle: "MyGame", maxConnectedPlayers: 8) 
    { (newGameSession, error) in 
     self.gameSession = newGameSession 
     print("\(newGameSession)") 
     newGameSession?.getShareURL(completionHandler: { (url, error) in 
      print("url: \(url) error: \(error)") 
     }) 
    } 

인쇄하는 것은 "nil"뿐입니다. 어떤 도움을 주셔서 감사합니다.

+0

iOS 10이 베타 상태가되면 바로이 기능을 사용할 수있었습니다. –

+1

당신은 어디에서이 문서를 찾니? Apple 설명서에는 메소드 서명 만 있습니다. 이 API를 사용하는 방법에 대한 온라인 가이드가 있습니까? –

+0

문서는 없지만 수업 및 방법은 매우 간단합니다. WWDC 2016 GameCenter 비디오로 시작, 세션 611 - https://developer.apple.com/videos/play/wwdc2016/611/ –

답변

2

newGameSession은 선택 사항입니다. 그래서 새로운 세션을 만들 때 뭔가 잘못되었다고 생각됩니다.

nil 일 가능성이 높습니다. error에는 유용한 정보가 포함되어 있습니다.

print("\(newGameSession)")print(newGameSession, error)으로 바꾸어서 error var의 내용을 확인하거나 수행 방법을 알고있는 경우 중단 점을 설정하십시오.

+0

으로 돌아가려면 잠시 시간이 걸렸지 만 여기에 오류가 있습니다 : 세션 : 없음 오류 : 선택 사항 (오류 도메인 = GKGameSessionErrorDomain 코드 = 2 "iCloud에 로그인하지 않았기 때문에 요청한 작업을 완료 할 수 없습니다.") UserInfo = {NSLocalizedDescription = iCloud에 로그인하지 않아서 요청한 작업을 완료 할 수 없습니다.}) iCloud에 로그인되어 있으며 OzSimTech의 답변처럼 제안했습니다. 앱 ID와 일치하는 컨테이너 이름을 사용하고 있습니다. 또한 게임 센터에 로그인했습니다. –

+1

설정으로 이동하여 iCloud 및 게임 센터에 로그인했는지 확인한 다음 다시 켜고 다시 시도하십시오. – WolfLink

0

"테스트"대신 앱의 iCloud 컨테이너 이름을 사용해보세요. 컨테이너 이름은 기본 컨테이너 옵션을 선택한 경우 iCloud.com.yourcompany.appname 형식입니다. 앱에 iCloud 컨테이너가 있는지 확인하려면 앱의 기능에서 활성화해야합니다.

+0

내가 말한 것처럼 번들 ID를 추가하려고했지만 여전히 작동하지 않습니다. 내가 작성한 댓글을 참조하십시오. 제임스의 대답. –

+0

일부 사람들은 iCloud 드라이브를 껐다가 다시 재생하려고 시도했지만 아직 제대로 작동하는 경우에도 iCloud 드라이브를 장치에서 사용하도록 설정하지 않았기 때문에이 오류가 발생했다고 말했습니다. 이 사이트에서 오류 텍스트를 찾으십시오. 다른 사람이 귀하의 앱에서 iCloud 기능을 사용하여 iCloud 문서를 활성화해야한다고 말하면서 다른 포인터를 찾으십시오. – OzSimTech

+0

나는 그것을 켜 놓았지만, 꺼져 있었지만 도움이되지 못했다. 당신이 작동하도록 만드는 코드를 게시 할 수 있습니까? –

1

나는 조금 늦게 점프하고 있지만 세션을 만들 때 사용하는 컨테이너 이름을 세 번 확인합니다.

xCode의 키 - 값 저장, iCloud 문서 및 CloudKit의 세 가지 옵션이 모두 활성화되었습니다.

iCloud 드라이브를 사용하지 않습니다.

다음 코드는 초대장을 보낼 때마다 성공적으로 새 세션을 만듭니다. 새 세션을 인쇄 한 다음 해당 컨테이너 ID에 대한 모든 기존 세션을 반복합니다.

-(void)turnBasedMatchmakerViewController:(GKTurnBasedMatchmakerViewController *)viewController didFindMatch:(GKTurnBasedMatch *)match 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 

    NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];  
    NSString *iCloudContainerName = [@"iCloud." stringByAppendingString: bundleIdentifier]; 


    [GKGameSession createSessionInContainer:iCloudContainerName 
              withTitle:@"test" 
           maxConnectedPlayers:4 
            completionHandler:^(GKGameSession * _Nullable session, NSError * _Nullable error) 
    { 
     NSLog(@"(1) Session: %@, Error: %@", session.identifier, [error description]); 

     [GKGameSession loadSessionsInContainer:iCloudContainerName 
          completionHandler:^(NSArray<GKGameSession *> * _Nullable sessions, NSError * _Nullable error) 
      { 
       for (GKGameSession *session in sessions) 
       { 
        NSLog(@"(2) Session: %@, Error: %@", session.identifier, [error description]); 
       } 

       NSLog(@"-----"); 
      }]; 

    }]; 
} 
+0

안녕하세요, 약간 주제는 아니지만 GKGameSession에 플레이어를 추가하는 방법은 무엇입니까? 나는 당신이 GKTurnBasedMatch를 참가자들 (GKPlayer 's)과 함께 돌려주는 turn 기반의 UI를 사용하는 것을 본적이 있습니까? 그리고 GKCloudPlayer를 가져올 수 없으므로 왜 세션을 만드시겠습니까? (나는 같은 것을하고 현대 IOS 10+ 접근 방식을 사용하고 싶었지만 매치 메이킹과 세션과 혼동했다.) 감사. –

3

에뮬레이터를 사용하는 경우 대신 장치를 사용하는 것이 좋습니다. 푸시 알림과 로그인 한 iCloud 계정에 의존하기 때문에 GKGameSessions는 에뮬레이터에서 제대로 작동하지 않습니다.

+1

이 질문에 대한 답을 제공하지 않습니다. 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)이 있으면 [모든 게시물에 댓글을 달 수 있습니다] (http://stackoverflow.com/help/privileges/comment); 대신에 [질문자의 설명이 필요없는 답변을 제공하십시오] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do- 대신). - [리뷰에서] (리뷰/저품절 포스트/14271201) –

+2

그래 ... 대답을 게시하기 전에 내 질문을 댓글로 올리려고했지만 충분한 점수가 없습니다. 내 대답을 억제하기로 결정했다면 GKGameSession 초보자는 에뮬레이터 지원이 부족하여 정기적으로 물려 받는다는 것을 알고 있습니다. –