2009-06-30 6 views
5

Ok, je l'ai essayé de créer mon propre objet GKSession et la méthode déléguée me donne une erreur dans la console que je ne l'ai pas compris comment réparer tout de suite. Je me demandais si quelqu'un avait des suggestions ou avait rencontré ce problème? * Juste une note - la variable peerStatus est définie ailleurs dans mon code. L'homologue peut avoir le statut "kServer" ou "kClient". Je préférerais que chacun soit dans GKSessionModeServer ou GKSessionModeClient parce que j'ai lu que si l'homologue est dans GKSessionModePeer, le temps de performance est en fait plus lent car il doit faire le travail à la fois du client et du serveur.GKSession problèmes - Objective-C GameKit

- (GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type { 
    if (peerStatus == kServer) { 
     GKSession *session = [[GKSession alloc] initWithSessionID:@"Josh_Land" displayName:nil sessionMode:GKSessionModeServer]; 
     return [session autorelease]; 
    } 
    else { 
     GKSession *session = [[GKSession alloc] initWithSessionID:@"Josh_Land" displayName:nil sessionMode:GKSessionModeClient]; 
     return [session autorelease]; 
    } 
} 

Le code d'erreur est tout:

écoute sur le port 56386 2009-06-30 10: 31: 41,892 GKTank [17756: 20b] *** Mettre fin à l'application du fait exception uncaught 'GKInvalidArgumentException' , la raison: « un vaild objet GKSession avec un mode GKSessionModePeer doit être fourni, ou pour créer un objet GKSession par défaut retour « néant » dans la mise en œuvre de -peerPickerController: sessionForConnectionType :. objet fourni a été: envoyé 0 paquets de données: rush (0 paquets 0 octets): compter (0 paquets 0 octets): rtrY (0 paquets 0 octets): sac (0 paquets 0 octets): rtt moyenne pondérée actuelle (0 ms) avec mode session: 0' 2009-06-30 10: 31: 41,893 GKTank [17756: 20b] Stack: ( 807902715, 2452446779, 807986683, 807986522 , 927035842, 927037074 , 927038407, 815223834 , 927038949, 9245, 8562, 814709201, 815110321 , 815119058, 815114270 , 814813151, 814722763, 814748641 , 839148405, 807687520 , 807683624, 839142449 , 839142646,)

+0

Il serait utile si vous l'erreur que vous posté obtenez. –

+0

Désolé, j'ai modifié le poste avec le code d'erreur maintenant. Cela fonctionne réellement si je cours configurer le GKSession à GKSessionModePeer pour les deux, mais j'essaye de rester loin de cela. Je préférerais que la session soit en mode Serveur ou Client. Je me demandais si cela est encore possible en ce moment (où il est sorti, pourrait-il y avoir un bug dans le code ??) ou est-ce mon code? –

+0

Je ne connais pas non plus la réponse mais avez-vous testé pour voir si c'est en fait plus lent? Si vous avez seulement lu que c'est plus lent, mais que vous n'avez pas vu de performance, cela pourrait bien être une optimisation prématurée. Cela dit, il serait intéressant de voir ce qui ne va pas avec votre test. –

Répondre

7

Je ne l'ai pas fait quoi que ce soit mis en œuvre en utilisant encore GameKit, mais juste regarder par-dessus la documentation, il ressemble à vous ne pouvez utiliser GKPeerPickerController que si vous utilisez GKSessionModePeer. Si vous voulez utiliser GKSessionModeServer/Client, vous devez travailler directement avec les sessions et leur délégué. Voir la section dans le Guide de programmation du kit de jeu sur Implementing a Server et Connecting to a Service.

Votre fonction principale tournerait autour de la méthode GKSessionDelegate
-session:peer:didChangeState: dans les deux modes client et serveur et
-acceptConnectionFromPeer:error: et -denyConnectionFromPeer: en mode serveur.

+0

ah merci, je vais essayer cela et rendre compte des résultats. –

+0

Après avoir vérifié avec apple, vous avez raison. –

Questions connexes