2013-08-21 89 views
4

我用下面的代碼scanForPeripheralsWithServices:返回結果兩次相同的圓周

[centralManager scanForPeripheralsWithServices:serviceUUIDArray 
     options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] 
     forKey:CBCentralManagerScanOptionAllowDuplicatesKey]] 

掃描perpheral設備,那麼結果在相同的圓周返回兩次。如何退貨?謝謝。

+0

按UUID過濾...如果它還沒有(還沒有給出),請將其丟棄( – Larme

+0

)只有在以前連接過UUID時,UUID纔可用於外圍設備。新外設沒有UUID。用'nil'過濾掉UUID將有效地禁止找到新的外圍設備。 – allprog

回答

1

發生這種情況是因爲外設的名稱已更新。在這種情況下,你再次獲得回調。

此線程包含了詳細的解釋:http://lists.apple.com/archives/bluetooth-dev/2013/Apr/msg00099.html

現金去伊坦起士林:

  1. 名稱讀取:

    設備名稱是通過根據優先級列表的iOS緩存連接後的設備名稱特徵

  2. 來自廣告包的名稱

注意,從廣告包的名稱應該是 在設備名稱特性最終名稱的前綴。

也許物理設備已經緩存了名稱,並且不會發送第二次更新,因爲它已經檢索到名稱。

即使您不需要 請求,您的應用程序也應該能夠處理重複項。

爲了解決重複,你可以檢查已經收到那些與isEqualTo:方法上的外圍設備或使用NSSet來保存它們。

+0

感謝信用:-)你真棒! <3 – Etan

+0

@Etan你在開玩笑嗎?我甚至給你做了代表。 – allprog

+2

@Etan,你是最棒的! (爲了澄清我上面的評論。) – allprog

相關問題