2010-07-09 75 views
3

在4.0下運行的Gamekit應用程序無法正確處理刪除GKSession對象。 3.1.3或3.2下運行時,如果對等體斷開和會話(蘋果演示如)被清除:4.0上的GameKit沒有準備好黃金時段?停止廣告服務

[gkSession disconnectFromAllPeers]; 
[gkSession setAvailable:NO]; 
[gkSession setDelegate:nil]; 
[gkSession setDataReceiveHandler:nil withContext:nil]; 

然後其他對等體接收狀態的改變和對等體的一個表視圖可以更新。

在我的應用程序中,一個對等體作爲服務器啓動,另一個作爲客戶機啓動。客戶端請求連接到服務器,並且客戶端名稱出現在服務器的播放器列表中。如果服務器選擇接受請求,則會話連接建立並且他們可以玩遊戲。但是,如果客戶端在服務器接受請求之前退出,則客戶端清除會話(如上所述),並且客戶端從服務器的對等列表中消失(作爲響應)(當它收到狀態更改時)。這在3.1-3.2令人驚訝地工作

當您運行相同的應用程序運行在4.0下服務器和客戶端拋出一個錯誤,並需要很長時間,同行接收狀態更改,並且當他們這樣做時,應用程序崩潰沒有任何錯誤(即使在構建參數中使用NSZombieEnabled = YES)。服務器永遠不會收到來自客戶端的「狀態更改」消息。相反,下面的錯誤拋出:

Thu Jul 8 23:27:26 unknown com.apple.mDNSResponder[18] <Notice>: BTLocalDeviceRemoveData: 60 byte key, 18 byte value 
Thu Jul 8 23:27:26 unknown MobileBluetooth[29] <Notice>: BTLocalDeviceRemoveData - BT_ERROR_INVALID_HANDLE 
Thu Jul 8 23:27:26 unknown com.apple.mDNSResponder[18] <Notice>: Call to BTLocalDeviceRemoveData failed with error 7 
Thu Jul 8 23:13:39 unknown mDNSResponder[18] <Error>: external_stop_advertising_service: 18 00Z1Tud0A\\.\\.Tonberry\M-b\M^@\M^Ys\\032iPhone._1htnu3uko0uvsp._udp.local. TXT txtvers=1\M-B\M-&state=A 
Thu Jul 8 23:13:39 unknown MobileBluetooth[29] <Notice>: BTLocalDeviceRemoveData - BT_ERROR_INVALID_HANDLE 

隨着我覺得關鍵是什麼錯誤:

Tue Jul 13 21:04:50 Tonberry com.apple.mDNSResponder[21] <Notice>: Call to BTDiscoveryAgentStopScan failed with error 400 

我看來像會話沒有被不可用(錯誤停止發佈廣告的服務) 。實際的崩潰:

Thread 3 Crashed: 
0 GameKitServices     0x06352f90 gckSessionChangeStateCList + 411 
1 GameKitServices     0x0635b49c gckSessionRecvProc + 1474 
2 libSystem.B.dylib    0x981c181d _pthread_start + 345 
3 libSystem.B.dylib    0x981c16a2 thread_start + 34 

我已經提交了一個錯誤,正在處理我的完整應用程序。該應用程序本身已經完成,幾乎已經準備好提交,並且在3.1.3/3.2下運行得非常好,但是在4.0版本的Gamekit當前狀態下,我無法再提交它。非常失望,所以希望這個錯誤報告有助於未來。如果有人明白這個錯誤或者我可能做錯了,我會非常感激。

如果可以,請幫助。我即將在這個應用程序中扔毛巾,它非常接近。

+0

其實剛剛從蘋果收到的消息說,這是一個已知的錯誤。任何解決方法都可以獲得賞金。 – typeoneerror 2010-07-14 18:27:59

+2

檢查它是否固定在4.1的測試版中。您可能只需等待幾個星期即可提交。 (僅4.1和3-3.2)。 – 2010-07-16 18:21:48

+0

該錯誤在4.1中修復。我昨晚反對它。麻煩的是,通知斷開連接仍需要15-30秒。有些東西仍然不對。雖然進步!你應該回答!機會是你的「嘗試4.1」的答案可能已經把你的500代表網關了) – typeoneerror 2010-07-16 19:35:56

回答

1

我的建議是使用4.1的最終預發佈版本,並報告「新」問題(重新打開現有的錯誤爲未修復或創建新錯誤)。這是恕我直言,你最好的選擇是在最終版本發佈之前將問題完全修復,或者從蘋果公司獲得體面的工作。

+0

是的,不得不硬着頭皮,傷心地。享受你的500!:D – typeoneerror 2010-07-20 20:35:49

+0

@Typeoneerror:非常感謝:D – 2010-07-20 22:39:32

1

對於任何尋求這方面幫助的人,我已經找到了解決4.0.x問題的解決方法(4.1解決了崩潰問題,而不是斷開連接時間)。只需自動接受一切。當有人請求connectToPeer的GameKit連接時,只需接受它。不要給用戶選擇它的選項。斷開與建立連接的對等端會立即通知服務器。如果讓它們處於「可用」狀態,那麼當它們離開連接時,它將使服務器崩潰。提前連接並經常接受!