我有一些問題需要在Swift中斷開BLE外設。首先,我試圖只使用cancelPeripheralConnection:
函數。但是如果我只是稱這個函數,didDisconnectPeripheral
函數永遠不會被調用。所以我試着按照Apple's參考指南。有說的是,你應該在斷開連接之前刪除每個通知。這真的有必要嗎?是否有可能一步取消所有通知?我設置了很多通知,所以我必須搜索許多服務和特性來重置它們。我想,這不可能是一個「做得好」的解決方案。在SWIFT中斷開BLE外設
編輯: 好吧,我想通了,那cancelPeripheralConnection
工作得很好,如果我把它在我的BluetoothManager
類,其中CBCentralManager
和CBPeripheralDelegate
包括...有沒有辦法斷開到的周邊之外這個功能?
編輯4:
import UIKit
class ValueCollectionView: UICollectionViewController
{
var valueCollectionViewCell: ValueCollectionViewCell = ValueCollectionViewCell()
var bluetoothManager: BluetoothManager = BluetoothManager()
override func viewDidLoad()
{
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "back:")
self.navigationItem.leftBarButtonItem = newBackButton;
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
}
func back(sender: UIBarButtonItem)
{
bluetoothManager.disconnectPeripheral(selectedPeripheralIndex!)
self.navigationController?.popViewControllerAnimated(true)
}
//Some Collection View functions...
}
這是我實現disconnectPeripheral
功能(集成在BluetoothManager類):
func disconnectPeripheral(peripheralIndex: Int)
{
CBmanager.cancelPeripheralConnection(peripheralArray![peripheralIndex].peripheral)
}
但無論如何,如果我叫這個功能, didDisconnectPeripheral
函數未被調用。當我將該功能放入BluetoothManager類時,例如在我發現最後一個特徵後,一切正常。
編輯5:
class BluetoothManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate
{
var CBmanager: CBCentralManager = CBCentralManager()
override init()
{
super.init()
self.CBmanager = CBCentralManager(delegate: self, queue: nil)
}
func connectPeripheral(peripheralIndex: Int)
{
CBmanager.connectPeripheral(peripheralArray![peripheralIndex].peripheral, options: nil)
}
func disconnectPeripheral(peripheralIndex: Int)
{
CBmanager.cancelPeripheralConnection(peripheralArray![peripheralIndex].peripheral)
}
//The other CentralManager functions...
}
你打算如何調用cancelPeripheralConnection?您需要在連接 – Paulw11
的CBCentralManager實例中調用它,我添加了兩個不同的類。 BluetoothManager類包含委託函數,當按下後退按鈕時,ValueCollectionView類應斷開BLE連接。 – Passe
在視圖控制器中使用藍牙功能不是一個很好的設計,因爲您正在混合這兩個功能,並需要保留對可能不需要的視圖控制器的引用。將所有藍牙功能移動到單獨的藍牙對象並在需要時傳遞對該對象的引用將更好。 – Paulw11