Позволяет ли GameKit пригласить определенного друга из Game Center на матч программно, то есть без представления GC ViewController? Следующая документация handleInviteFromGameCenter, кажется, подразумевает, что вы можете заполнить GKMatchRequest.playersToInvite и использовать его с [GKTurnBasedMatch findMatchForRequest]:
Когда ваш делегат получит это сообщение, ваше приложение должно создать новый объект GKMatchRequestIn и назначить playerTo свойство playerToInvite запроса на совпадение. Затем ваше приложение может либо вызвать метод класса GKTurnBasedMatch findMatchForRequest: withCompletionHandler: чтобы найти совпадение программно , либо оно может использовать запрос для создания экземпляра нового GKTurnBasedMatchmakerViewController, чтобы показать игроку пользовательский интерфейс.
Но я обнаружил, что когда findMatchForRequest вызывает мой блок завершения с заполненным совпадением, идентификатор GameCenter, который я ему передал, не устанавливается как второй игрок. Вместо этого он пуст и имеет статус «соответствует». И поэтому, когда я вызываю endTurnWithNextParticipant, он выполняется успешно, но приглашение не получено на моем втором устройстве.Это иллюстрирует то, что я делаю:
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 2;
request.playersToInvite = [NSArray arrayWithObjects: otherPlayerGCID,nil ];
[GKTurnBasedMatch findMatchForRequest:request
withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error)
{
if (error)
NSLog(@"returned from fimdmatch but with error");
else if (match != nil) {
NSLog(@"match returned success and match populated");
NSArray* otherPlayers = [match participants];
if (otherPlayers.count>1) {
NSData* placeholder = [@"no data" dataUsingEncoding:NSUTF8StringEncoding];
[match endTurnWithNextParticipant:[otherPlayers objectAtIndex:1]
matchData:placeholder
completionHandler:^(NSError *error)
{
if (error)
NSLog(@"returned from END TURN but with error");
else
NSLog(@"returned from END TURN successfully");
}];
}
}
else
System::log("match returned success but match NOT populated");
}];
И, как и у человека, у которого здесь похожая проблема Game Center программно приглашает друзей , если я вставлю вызов к контроллеру представления, в моем случае GKTurnBasedMatchmakerViewController , вроде все работает.
Спасибо.
ОБНОВЛЕНО: Я действительно видел в презентации Apple Developer по пошаговой сборке мусора упоминание чего-то вроде: «Если вы хотите пригласить друга сборщика мусора, мы просим вас пройти через контроллер представления сборщика мусора.
Любое понимание приветствуется. Еще раз спасибо .