Trennen der Verbindung zu einem BLE-Peripheriegerät in SWIFT

Ich habe einige Fragen zu trennen, die ein BLE-Peripheriegerät in Swift. Zuerst, ich habe versucht, nur die cancelPeripheralConnection: Funktion. Aber wenn ich nur diese Funktion aufrufen, die didDisconnectPeripheral Funktion wird nie aufgerufen. Also versuchte ich zu Folgen, Apple reference guide. Es ist zu sagen, dass Sie sollten löschen alle Benachrichtigungen, bevor die Verbindung getrennt wird. Ist das wirklich nötig? Und gibt es eine Möglichkeit zu stornieren, werden alle Meldungen in einem Schritt? Ich habe eine Menge von Meldungen, so dass ich suchen muss, in vielen Leistungen und Eigenschaften, um diese zurückzusetzen. Ich denke, das kann nicht "gut gemacht" - Lösung.

EDIT:
Okay, ich dachte, dass die cancelPeripheralConnection funktioniert ziemlich gut, wenn ich es nennen-in meinem BluetoothManager Klasse, wo CBCentralManager und CBPeripheralDelegate enthalten sind... gibt es eine Möglichkeit zu trennen, um eine periphere außerhalb dieser Funktion?

EDIT 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...
}

- Und dies ist meine Umsetzung des disconnectPeripheral - Funktion (integriert im BluetoothManager-Klasse):

func disconnectPeripheral(peripheralIndex: Int)
{
    CBmanager.cancelPeripheralConnection(peripheralArray![peripheralIndex].peripheral)
}

Aber trotzdem, wenn ich diese Funktion aufrufen, die didDisconnectPeripheral Funktion nicht aufgerufen. Wenn ich die Funktion in der BluetoothManager-Klasse z.B., nachdem ich entdeckt das Letzte Merkmal, alles funktioniert.

EDIT 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...

}
Wie werden Sie versuchen, rufen Sie cancelPeripheralConnection? Du musst es in die Instanz der CBCentralManager, hat die Verbindung
Ich habe meine zwei verschiedene Klassen. Der BluetoothManager-Klasse enthält die Delegierten Funktionen und die ValueCollectionView Klasse trennen soll die BLE-Verbindung beim drücken der zurück-Taste.
Nachdem die Bluetooth-Funktionen in einer view-controller ist das nicht ein sehr gutes design, weil Sie mischen die beiden Funktionen und benötigen, um einen Verweis auf einen view-controller, die möglicherweise nicht benötigt werden. Wäre es besser zu verschieben Sie alle Ihre Bluetooth-Funktionen in einen separaten Bluetooth-Objekt, und übergeben Sie eine Referenz auf das Objekt, wo nötig
Ich habe versucht, es zu implementieren, wie Sie sagte, aber die didDisconnectPeripheral Funktion nicht aufgerufen sowieso.
Sie benötigen, um sicherzustellen, dass Sie nur die Instanziierung einer Instanz der Bluetooth Klasse (und daher CBCentral).

InformationsquelleAutor Passe | 2015-10-21

Schreibe einen Kommentar