在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當前狀態下,我無法再提交它。非常失望,所以希望這個錯誤報告有助於未來。如果有人明白這個錯誤或者我可能做錯了,我會非常感激。
如果可以,請幫助。我即將在這個應用程序中扔毛巾,它非常接近。
其實剛剛從蘋果收到的消息說,這是一個已知的錯誤。任何解決方法都可以獲得賞金。 – typeoneerror 2010-07-14 18:27:59
檢查它是否固定在4.1的測試版中。您可能只需等待幾個星期即可提交。 (僅4.1和3-3.2)。 – 2010-07-16 18:21:48
該錯誤在4.1中修復。我昨晚反對它。麻煩的是,通知斷開連接仍需要15-30秒。有些東西仍然不對。雖然進步!你應該回答!機會是你的「嘗試4.1」的答案可能已經把你的500代表網關了) – typeoneerror 2010-07-16 19:35:56