2010-10-05 67 views
4

昨天,我爲iPhone應用程序設計了一個簡單的藍牙網絡。今天早上,當我試圖繼續開發時,它突然沒有在我的iPod Touch 2G上工作。然而,它在iPAD上工作得很好。當我嘗試在iPod上將GKSession對象的可用性設置爲YES時,出現了問題,並創建了服務器會話。控制檯收到以下:藍牙不可用 - 稍後再試

2010-10-05 14:28:55.762 Clusters[67:307] BTM: attaching to BTServer 
2010-10-05 14:28:55.786 Clusters[67:307] <<<Session>>> +[GKBluetoothSupport _determineBluetoothStatus]: BT not available - try again later. 
2010-10-05 14:28:55.862 Clusters[67:307] BTM: posting notification BluetoothAvailabilityChangedNotification 

現在,我知道,藍牙打開時,我知道它的工作,因爲我下載了一個免費的藍牙傳輸應用程序來測試這一點。我重置了我的iPod,清理了我的目標,在代碼的各個部分戳動了戳子,但我無法找出應用程序無法創建藍牙服務器的原因。它可以創建一個藍牙客戶端就好,因爲該應用程序可以很好地接收我的iPad發送的數據。

任何人都可以提出任何建議,可能會發生什麼嗎?我在智慧的結尾。

回答

3

對,在這一天有一百萬和一個死路一條工作,我終於發現了罪魁禍首。我的'平'例程。正如我猜想大多數人會知道的,網絡會話需要接收常規數據,否則會超時並關閉。爲了防止這種情況發生,我建立了一個簡單的例程,每隔10秒向所有對等點發送一個小數據包(4個字節)一次。問題?如果沒有對等體連接,使用[GKSession SendDataToAllPeers:withDataMode:error:]方法將導致服務器嚴重剽竊。出於某種原因,重要的檢查是否有人連接在一起被忽略。我通過把一個簡單的斷言在我的日常平像這樣解決了這個問題:

if ([[network peersWithConnectionState:GKPeerStateConnected] count] > 0) {ping code here} 

再一次它的工作。我不能爲了我的生活記住之前發生的這個問題,或者爲什麼它不應該在早期操作系統上運行的iPad上發生。我只能猜測,稍後的更新導致了這個問題。無論如何,現在所有的問題都已經解決了,雖然我的計劃遠沒有水密,但我至少現在可以集中精力讓其餘的工作。

-Ash

0

我遇到了同樣的問題。

前兩行表示藍牙不可用,但第三行表示可用性更改。雖然沒有記錄,但實際上這意味着藍牙正在變爲可用。

所以基本上這個日誌消息是一個巨大的分心,應該被忽略。

1

還有一件事你應該做:在應用程序終止之前關閉你的GKSession。你的代碼可能是這樣的:

// YourAppDelegate.m 
- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    [[Business sharedInstance] shutdownBluetooth]; 
} 

// Business.m 
// considering that you have a GKSession instance on 'session' variable 
- (void)shutdownBluetooth { 
    [self.session disconnectFromAllPeers]; 
    self.session.available = NO; 
    [self.session setDataReceiveHandler:nil withContext:nil]; 
    self.session.delegate = nil; 
    self.session = nil; 
} 

根據我的經驗,這是足以解決這個問題。

相關問題