2009-06-30 39 views
5

好吧,我一直在試圖創建自己的GKS​​ession對象和委託方法是給我的,我還沒有想出如何解決,只是還沒有控制檯的錯誤。我想知道是否有人有任何建議或遇到過這個問題? *請注意 - 我的代碼中的其他地方定義了變量peerStatus。對等體可以被賦予「kServer」或「kClient」的狀態。我寧願將每個定義在GKSessionModeServer或GKSessionModeClient中,因爲我讀過如果對等體位於GKSessionModePeer中,性能時間實際上比較慢,因爲它必須同時執行客戶機和服務器的工作。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]; 
    } 
} 

整個錯誤代碼是:

偵聽端口56386 2009-06-30 10:31:41.892 GKTank [17756:20B] ***終止應用程序由於未捕獲的異常 'GKInvalidArgumentException' ,reason:'必須提供帶有GKSessionModePeer模式的vaild GKSession對象,或者在實現-peerPickerController:sessionForConnectionType:時創建默認的GKSession對象返回'nil'。提供的對象是:發送0數據包:rush(0包0字節):依賴(0包0字節):rtry(0包0字節):sack(0包0字節):當前加權平均rtt會話模式:0' 2009-06-30 10:31:41.893 GKTank [17756:20B]堆棧:( 807902715, 2452446779, 807986683, 807986522, 927035842, 927037074, 927038407, 815223834, 927038949, 9245, 8562, 814709201, 815110321, 815119058, 815114270, 814813151, 814722763, 814748641, 839148405, 807687520, 807683624, 839142449, 839142646,)

+0

如果您發佈了您收到的錯誤,這將會有所幫助。 – 2009-06-30 14:33:06

+0

對不起,我現在編輯了錯誤代碼的帖子。它實際上工作,如果我運行配置GKSession GKSessionModePeer兩個,但我試圖遠離形式。我寧願將會話指定爲服務器或客戶端模式。我想知道現在是否有可能(它剛剛出現,代碼中是否存在一些錯誤?)還是我的代碼? – 2009-06-30 14:55:09

回答

7

我還沒有實際使用實施尚的GameKit,但只是在尋找的文件過任何東西,它看起來像如果您使用的是GKSessionModePeer,則只能使用GKPeerPickerController。如果你想使用GKSessionModeServer/Client,你需要直接使用會話及其委託。請參閱遊戲工具包編程指南中有關Implementing a ServerConnecting to a Service的部分。

你的主要功能將圍繞着GKSessionDelegate方法
-session:peer:didChangeState:在客戶端和服務器模式和
-acceptConnectionFromPeer:error:-denyConnectionFromPeer:在服務器模式。