2013-07-17 86 views
1

我正在使用核心藍牙。我正在做簡單的寫操作。而在周側獲得該值進入:CoreBluetooth [警告]未知錯誤:241

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests 

,但正如我上面的方法實現它正在採取太多的時間來寫的值。而且我在中央側得到警告:

CoreBluetooth[WARNING] Unknown error: 241 

這是很奇怪的,因爲當我走向docs看我發現了錯誤代碼只能從0到17。有沒有人可以解決這個問題?

回答

1

我還沒有清除該錯誤代碼。但現在解決了這個問題。我創建了屬性CBCharacteristicPropertyWriteWithoutResponse,所以上面的錯誤被刪除。數據也順利寫入外設。但仍然想知道那個錯誤。

+0

什麼是寫你的特徵值?它是否寫有響應請求? – Larme

+0

@Larme:最初它是響應請求,現在我已經將它改變爲沒有響應。 –

1

確保你打電話:

斯威夫特:

func respondToRequest(request: CBATTRequest!, withResult result: CBATTError) 

的Objective-C:

- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result 

併成功通過CBATTError.Success並調用該函數只有一次。例如。從委託回調:

func peripheralManager(peripheral: CBPeripheralManager!, didReceiveWriteRequests requests: AnyObject[]!) 

電話:

peripheral.respondToRequest(requests[0] as CBATTRequest, withResult: CBATTError.Success) 

這解決了這個問題對我們來說。

1

我同意邁克爾。我以前遇到過同樣的問題,最終得到解決。

如果中央裝置將數據寫入到外圍設備,它可以在任一CBCharacteristicPropertyWriteWithoutResponse模式或CBCharacteristicPropertyWriteWithResponse模式下工作。第一個不需要外圍設備響應,但第二個就可以。如果中央設備在需要時沒有收到來自外設的響應,則會發生此錯誤。由於中央設備只等待幾秒鐘,你應該調用方法

- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result 

到只要委託方法

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests 

被稱爲響應寫入操作。

如果寫入數據很大,外設可能會收到多個CBATTRequest。請記住只響應請求數組的第一個請求。

1

2410xF1位於藍牙屬性協議(ATT)的「應用程序錯誤」範圍內,請參閱第3卷F部分3.4.1藍牙4.0規範的錯誤處理。不幸的是,蘋果沒有記錄這些使用。

我的經驗也一直是iOS的自動與代表應用程序與0xF1的ATT錯誤響應來響應,如果它不叫-[peripheralManager respondToRequest:withResult:]及時,響應-peripheralManager:didReceiveReadRequest:委託回調。