2016-04-22 2 views
1

verbinden Ich machte App auf iOS 9, die finden und verbindet sich mit BLE. Aber wenn ich es auf iOS 8 laufe passiert nichts. Es findet nichts. Warum? Ich denke, es sollte auf func centralManagerDidUpdateState(central: CBCentralManager) in if (central.state == CBCentralManagerState.PoweredOn) Fall laufen. Aber wenn ich es ausführe, wird diese Funktion nicht aufgerufen. Auf iOS 9 funktioniert es einwandfrei und nennt das func.iOS 8 Verbindung zu BLE nicht möglich. Kann in iOS 9

import CoreBluetooth 
import Foundation 

class BeaconConnection: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate { 

private static var connectedBeacon: BeaconConnection? 

static func sharedInstance() -> BeaconConnection { 
    if connectedBeacon == nil { 
     connectedBeacon = BeaconConnection() 
    } 
    return connectedBeacon! 
} 

let centralManager = CBCentralManager() 
var connectedPeripheral:CBPeripheral? 
var peripherals: Array<CBPeripheral> = Array<CBPeripheral>() 

func initializer() { 
    centralManager.delegate = self 
} 

func connectToPeripheral(index: Int) { 
    print(peripherals[index]) 
    connectedPeripheral = peripherals[index] 
    centralManager.stopScan() 
    connectedPeripheral!.delegate = self 
    centralManager.connectPeripheral(connectedPeripheral!, options: nil) 
} 

func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) { 
    print(peripheral) 
    if !peripherals.contains(peripheral) { 
     peripherals.append(peripheral) 
    } 
} 

func centralManagerDidUpdateState(central: CBCentralManager) { 
    print("centralManagerDidUpdateState") 
    if (central.state == CBCentralManagerState.PoweredOff) { 
     print("CoreBluetooth BLE hardware is powered off") 
    } 
    else if (central.state == CBCentralManagerState.PoweredOn) { 
     print("CoreBluetooth BLE hardware is powered on and ready") 
     self.centralManager.scanForPeripheralsWithServices(nil, options: nil) 
    } 
    else if (central.state == CBCentralManagerState.Unauthorized) { 
     print("CoreBluetooth BLE state is unauthorized") 
    } 
    else if (central.state == CBCentralManagerState.Unknown) { 
     print("CoreBluetooth BLE state is unknown") 
    } 
    else if (central.state == CBCentralManagerState.Unsupported) { 
     print("CoreBluetooth BLE hardware is unsupported on this platform") 
    } 
} 

func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) { 
    print("didConnectPeripheral") 
    peripheral.delegate = self 
    peripheral.discoverServices(nil) 
} 

func centralManager(central: CBCentralManager, didFailToConnectPeripheral peripheral: CBPeripheral, error: NSError?) { 
    print("failed to connect") 
} 

func centralManager(central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: NSError?) { 
    print("didDisconnectPeripheral") 
} 

func centralManager(central: CBCentralManager, willRestoreState dict: [String : AnyObject]) { 
    print("willRestoreState") 
} 

func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?) { 
    for service in peripheral.services! { 
     peripheral.discoverCharacteristics(nil, forService: service) 
    } 
} 

func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?) { 

} 
} 
+0

Vergewissern Sie sich, dass das Ziel, für das Sie es kompilieren, der Plattform entspricht, auf der Sie es ausführen möchten. Ich hatte ein paar Probleme mit Code wie diesem. Also, wenn es ein iPad mit 8.x ist, stellen Sie sicher, dass Sie es für 8.x kompilieren. – user3069232

Antwort

0

Der Fehler war hier

centralManager.delegate = self 

In iOS 9 es funktioniert, aber in iOS 8 sollte wie dieses

centralManager = CBCentralManager(delegate: self, queue: nil) 

sein und kann sogar löschen diese Func

func initializer() { 
centralManager.delegate = self 
} 

und schreiben Sie so

override init() { 
    super.init() 
    centralManager = CBCentralManager(delegate: self, queue: nil) 
} 
Verwandte Themen