繁体   English   中英

IOS 9.1 / Xcode 7.1.1中的蓝牙损坏

[英]Bluetooth broken in IOS 9.1/Xcode 7.1.1

在10.11.1下使用Xcode 7.1.1运行IOS 9.1 从本教程中剪切此代码; 并与其他几个来源/站点进行仔细检查。

http://hatemfaheem.blogspot.ch/2014/12/how-would-you-scan-for-nearby-ble.html

这是我的代码...

import Foundation
import CoreBluetooth

class BLEManager  {
var centralManager : CBCentralManager!
var bleHandler : BLEHandler // delegate
init() {
    self.bleHandler = BLEHandler()
    self.centralManager = CBCentralManager(delegate: self.bleHandler, queue: nil)
}
}

class BLEHandler : NSObject, CBCentralManagerDelegate {
override init() {
    super.init()
}

func centralManagerDidUpdateState(central: CBCentralManager) {
    switch (central.state)
    {
    case .Unsupported:
        print("BLE is unsupported")
    case .Unauthorized:
        print("BLE is unauthorized")
    case .Unknown:
        print("BLE is unknown")
    case .Resetting:
        print("BLE is reseting")
    case .PoweredOff:
        print("BLE is powered off")
    case .PoweredOn:
        print("BLE is powered on")
        central.scanForPeripheralsWithServices(nil, options: nil)
    default:
        print("BLE default")
    }
}

func centralManager(central: CBCentralManager, didConnectPeripheral peripheral: CBPeripheral) {
    print("didConnectPeripheral")
}

func centralManager(central: CBCentralManager!,
    didDiscoverPeripheral peripheral: CBPeripheral!,
    adverismentData: [NSObject : AnyObject]!,
    RSSI: NSNumber!)
{
    print("\(peripheral.name) : \(RSSI) dBm")
}
}

我用以下代码在View Controller中调用的

 override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    var bleManager: BLEManager!
    bleManager = BLEManager()
}

现在,我在装有9.1的iPad Air上运行它,插入并拔出并重新插入ibeacon,但控制台上没有任何显示,这表明它根本无法正常工作。 现在我知道ibeacon正在运行; 因为我使用Radius Networks的ScanBeacon工具找到了它。

好吧,我知道ibeacons和Core Bluetooth不能很好地结合在一起,但是可以确定应该调用DiscoverPeripheral吗? 还是我错过了代码中的关键行?

您的BLEManager超出范围,并在viewDidLoad的末尾释放。 使其成为成员变量,以使其具有更长,更有用的寿命:

var bleManager = BLEManager()

override func viewDidLoad() {
    // etc
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM