2009-06-30 6 views
5

Ok, he estado intentando crear mi propio objeto GKSession y el método delegar me está dando un error en la consola que aún no he resuelto cómo solucionarlo. Me preguntaba si alguien tenía alguna sugerencia o había encontrado este problema. * Solo una nota: la variable peerStatus se define en otra parte de mi código. El par puede recibir un estado de "kServer" o "kClient". Prefiero definir cada uno de ellos en GKSessionModeServer o GKSessionModeClient porque he leído que si el par está en GKSessionModePeer, el tiempo de rendimiento es realmente más lento porque tiene que hacer el trabajo tanto del cliente como del servidor.Problemas con GKSession - 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]; 
    } 
} 

El código de error es todo:

escucha en el puerto 56386 2009-06-30 10: 31: 41.892 GKTank [17756: 20b] *** Terminación de aplicación debido a la no detectada 'GKInvalidArgumentException' excepción , razón: 'Se debe suministrar un objeto GKSession vaild con un modo GKSessionModePeer, o para crear un objeto GKSession predeterminado devolver' nil 'en la implementación de -peerPickerController: sessionForConnectionType :. El objeto suministrado fue: enviado 0 paquetes de datos: rush (0 paquetes 0 bytes): confianza (0 paquetes 0 bytes): rtry (0 paquetes 0 bytes): sack (0 paquetes 0 bytes): promedio actual ponderado rtt (0 ms) con modo de sesión: 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

Sería útil si publicó el error que está recibiendo. –

+0

Lo siento, edité la publicación con el código de error ahora. Realmente funciona si ejecuto configurar GKSession en GKSessionModePeer para ambos, pero estoy tratando de mantenerme alejado de eso. Preferiría designar la sesión para que esté en el modo Servidor o Cliente. Me preguntaba si esto es incluso posible ahora (donde acaba de salir, ¿podría haber algún error en el código?) ¿O es mi código? –

+0

No sé la respuesta tampoco, pero ¿has probado para ver si en realidad es más lento de la manera que importa? Si solo has leído que es más lento, pero que en realidad no se ha visto un rendimiento, entonces esto podría ser una optimización prematura. Dicho esto, sería interesante ver qué está pasando con su prueba. –

Respuesta

7

En realidad no he implementado nada en el uso de GameKit todavía, pero simplemente mirando por encima de la documentación, que parece solo puede usar GKPeerPickerController si está usando GKSessionModePeer. Si desea utilizar GKSessionModeServer/Client, debe trabajar directamente con las sesiones y sus delegados. Consulte la sección en la Guía de programación del juego de juegos en Implementing a Server y Connecting to a Service.

Su funcionalidad principal giraría en torno al método GKSessionDelegate
-session:peer:didChangeState: tanto en el modo de cliente y servidor y
-acceptConnectionFromPeer:error: y -denyConnectionFromPeer: en modo servidor.

+0

ah gracias, intentaré eso e informaré los resultados. –

+0

Después de consultar con Apple, tienes razón. –

Cuestiones relacionadas