createSession в GKGameSession только возвращает ноль

Я пытаюсь начать новую GKGameSession, и когда я использую createSession, все, что я могу получить, это ноль. Вот мой код:

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)")
        })
    }

Единственное, что он печатает, это "ноль". Любая помощь приветствуется.

4 ответа

Если вы используете эмулятор, я предлагаю вместо этого использовать устройство. GKGameSessions плохо работают с эмулятором, потому что они зависят от push-уведомлений и учетной записи iCloud, которая вошла в систему.

newGameSession не является обязательным. Похоже, что-то пошло не так при создании нового сеанса.

я бы сказал newGameSession похоже nil, в таком случае error надеюсь, будет содержать полезную информацию.

Попробуйте заменить print("\(newGameSession)") с print(newGameSession, error) чтобы увидеть, что error Вар должен сказать, или установить точку останова, если вы знаете, как это сделать.

Попробуйте использовать имя контейнера iCloud вашего приложения вместо "test". Имя контейнера будет иметь формат iCloud.com.yourcompany.appname, если вы выбрали опцию контейнера по умолчанию. Чтобы ваше приложение имело контейнер iCloud, вам необходимо включить его в разделе "Возможности" вашего приложения.

Я немного запоздал, но я бы трижды проверил имя контейнера, который вы используете для создания сеанса.

Я включил все три параметра в xCode: хранилище значений ключей, документы iCloud и CloudKit.

Я не использую диск iCloud.

Следующий код успешно создает новый сеанс каждый раз, когда я отправляю приглашения. Он печатает новый сеанс, а затем повторяет все существующие сеансы для этого идентификатора контейнера.

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

     }];
}
Другие вопросы по тегам