2009-06-30 3 views
5

Ok, ich habe versucht, mein eigenes GKSession-Objekt zu erstellen und die Delegate-Methode gibt mir einen Fehler in der Konsole, die ich noch nicht herausgefunden habe, wie Sie noch beheben. Ich habe mich gefragt, ob jemand irgendwelche Vorschläge hatte oder dieses Problem hatte? * Nur eine Anmerkung - die Variable PeerStatus ist an anderer Stelle in meinem Code definiert. Der Peer kann entweder den Status "kServer" oder "kClient" erhalten. Ich würde eher definieren, dass jeder in GKSessionModeServer oder GKSessionModeClient ist, weil ich gelesen habe, dass, wenn der Peer in GKSessionModePeer ist, die Leistungszeit tatsächlich langsamer ist, da sie die Arbeit von Client und Server erledigen muss.GKSession Probleme - 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]; 
    } 
} 

Der gesamte Fehlercode ist:

auf Port 56386 2009-06-30 10: 31: 41,892 GKTank [17756: 20b] *** app aufgrund abgefangene Ausnahme abschließenden 'GKInvalidArgumentException' , Grund: 'Es muss ein vaildes GKSession-Objekt mit einem GKSessionModePeer-Modus angegeben werden, oder um ein Standard-GKSession-Objekt zu erstellen, geben Sie' nil 'in der Implementierung von -peerPickerController: sessionForConnectionType: zurück. Geliefertes Objekt war: gesendet 0 Datenpakete: rush (0 Pakete 0 Bytes): rely (0 Pakete 0 Bytes): rtry (0 Pakete 0 Bytes): sack (0 Pakete 0 Bytes): aktueller gewichteter Mittelwert rtt (0 ms) mit Sitzungsmodus: 0' 2009-06-30 10: 31: 41,893 GKTank [17756: 20b] Stack: ( 807.902.715, 2452446779, 807.986.683, 807.986.522, 927.035.842, 927.037.074, 927.038.407, 815.223.834, 927038949, 9245, 8562, 814709201, 815110321 , 815119058, 815114270 , 814.813.151, 814722763, 814748641 , 839148405, 807687520 , 807683624, 839142449 , 839.142.646,)

+0

Es wäre hilfreich, wenn Sie den Fehler gepostet haben, den Sie bekommen. –

+0

Entschuldigung, ich habe den Post jetzt mit dem Fehlercode bearbeitet. Es funktioniert tatsächlich, wenn ich die GKSession zu GKSessionModePeer für beide konfiguriere, aber ich versuche, davon wegzubleiben. Ich würde lieber die Sitzung als Server- oder Client-Modus festlegen. Ich habe mich gefragt, ob das jetzt überhaupt möglich ist (wo es gerade rausgekommen ist, könnte es einen Bug im Code geben ??) oder ist es mein Code? –

+0

Ich kenne die Antwort auch nicht, aber haben Sie getestet, um zu sehen, ob es in irgendeiner Weise tatsächlich langsamer ist? Wenn Sie nur gelesen haben, dass es langsamer ist, aber noch keinen Leistungseinbruch gesehen hat, könnte dies eine vorzeitige Optimierung sein. Das heißt, es wäre interessant zu sehen, was mit Ihrem Test falsch läuft. –

Antwort

7

Ich habe nicht wirklich etwas noch mit umgesetzt GameKit, sondern nur über die Dokumentation suchen, es sieht aus wie Sie können GKPeerPickerController nur verwenden, wenn Sie GKSessionModePeer verwenden. Wenn Sie GKSessionModeServer/Client verwenden möchten, müssen Sie direkt mit den Sitzungen und deren Delegaten arbeiten. Siehe den Abschnitt im Game Kit Programmierhandbuch unter Implementing a Server und Connecting to a Service.

Ihre Hauptfunktion würde drehen sich um die GKSessionDelegate Methode
-session:peer:didChangeState: in Client- und Server-Modi und
-acceptConnectionFromPeer:error: und -denyConnectionFromPeer: im Server-Modus.

+0

ah danke, ich werde das versuchen und die Ergebnisse zurückmelden. –

+0

Nach der Überprüfung mit Apple haben Sie Recht. –

Verwandte Themen