2009-06-30 9 views
5

Ok, ho cercato di creare il mio oggetto GKSession e il metodo delegate mi dà un errore nella console che non ho ancora capito come risolvere. Mi stavo chiedendo se qualcuno avesse qualche suggerimento o avesse riscontrato questo problema? * Solo una nota: la variabile peerStatus è definita altrove nel mio codice. Al peer può essere assegnato uno stato di "kServer" o "kClient". Preferirei definire ognuno di essi in GKSessionModeServer o GKSessionModeClient perché ho letto che se il peer si trova in GKSessionModePeer, il tempo di esecuzione è in realtà più lento perché deve svolgere il lavoro sia del client che del server.Problemi di 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]; 
    } 
} 

Il codice di errore insieme è:

ascolto sulla porta 56386 2009-06-30 10: 31: 41,892 GKTank [17756: 20b] *** terminazione app causa uncaught eccezione 'GKInvalidArgumentException' , motivo: 'È necessario fornire un oggetto vaild GKSession con una modalità GKSessionModePeer o per creare un oggetto GKSession predefinito restituire' nil 'nell'implementazione di -peerPickerController: sessionForConnectionType :. L'oggetto fornito era: inviato 0 pacchetti di dati: rush (0 pacchetti 0 byte): conta (0 pacchetti 0 byte): rtry (0 pacchetti 0 byte): sack (0 pacchetti 0 byte): media ponderata corrente rtt (0 ms) con modalità sessione: 0' 2009-06-30 10: 31: 41,893 GKTank [17756: 20b] Stack: ( 807.902.715, 2.452.446,779 mila, 807.986.683, 807.986.522 , 927.035.842, 927.037.074 , 927.038.407, 815.223.834 , 927038949, 9245, 8562, 814.709.201, 815.110.321 , 815.119.058, 815.114.270 , 814.813.151, 01.235.164,106174 millions814722763, 814.748.641, 839.148.405 , 807.687.520, 807.683.624 , 839.142.449, 839.142.646 ,)

+0

Sarebbe utile se hai postato l'errore che stai ricevendo. –

+0

Spiacente, ho modificato il post con il codice di errore ora. Funziona davvero se eseguo configure GKSession su GKSessionModePeer per entrambi, ma sto cercando di stare lontano da quello. Preferirei che la sessione fosse in modalità Server o Client. Mi stavo chiedendo se questo è anche possibile in questo momento (dove è appena uscito, potrebbe esserci qualche bug nel codice ??) o è il mio codice? –

+0

Non conosco la risposta, ma hai provato per vedere se è effettivamente più lento in ogni modo che conta? Se hai solo letto è più lento, ma in realtà non si vede una performance da esso, allora questa potrebbe essere l'ottimizzazione prematura. Detto questo, sarebbe interessante vedere cosa non va nel test. –

risposta

7

Non ho effettivamente implementato tutto ciò utilizzando GameKit ancora, ma solo guardando sopra la documentazione, sembra puoi utilizzare GKPeerPickerController solo se utilizzi GKSessionModePeer. Se si desidera utilizzare GKSessionModeServer/Client, è necessario lavorare direttamente con le sessioni e il loro delegato. Vedere la sezione nella Guida alla programmazione del kit di giochi su Implementing a Server e Connecting to a Service.

la funzionalità principale sarebbe ruotano attorno al metodo GKSessionDelegate
-session:peer:didChangeState: sia in modalità client e server e
-acceptConnectionFromPeer:error: e -denyConnectionFromPeer: in modalità server.

+0

ah grazie, ci proverò e riferirò i risultati. –

+0

Dopo aver controllato con Apple, hai ragione. –

Problemi correlati