2017-10-04 65 views
0

我学习蓝牙核心框架,我做了一个测试项目有关它的学习:蓝牙核心斯威夫特获得设备名称

class ViewController: UIViewController,CBCentralManagerDelegate,CBPeripheralDelegate { 

    var centralManager: CBCentralManager = CBCentralManager() 
    var peripheral: CBPeripheral? = nil 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
     centralManager = CBCentralManager(delegate: self, queue: nil) 
    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 

    } 

    func centralManagerDidUpdateState(_ central: CBCentralManager) 
    { 
     central.scanForPeripherals(withServices: nil, options: nil) 
    } 

    @available(iOS 5.0, *) 
    public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) 
    { 
     let device = (advertisementData as NSDictionary) 
      .object(forKey: CBAdvertisementDataLocalNameKey) 
      as? NSString 

     let isMyIphone = device?.contains("iPhone") 

    } 
} 

对于开始我想看看我周围的蓝牙名称,为此我有2个iPhone。 一个我用于执行这个'应用程序'扫描,我想看到另一个iPhone的名称(在蓝牙设置名称是'iPhone'),但是当我开始扫描方法'didDiscover'被称为,但是设备常量为零。 为什么?我错了什么?

回答

1

是更好,如果你使用 peripheral.name 代替
设装置=(advertisementData为的NSDictionary) .object(forKey:CBAdvertisementDataLocalNameKey) 作为? NSString

+0

感谢您的回复!你的回答在技术上不是_answer_,你只是建议如果用户做了一些不同的事情会更好。更好_how_,究竟是什么?一些有用的东西:1)利用SO对格式化的支持,并说,例如,“使用'peripheral.name'而不是'let device =((advertisementData as NSDictionary).object(...)', 2)如果你已经看到你的建议改变解决像原始海报那样的问题,可以明确地说,例如,“我已经完全看到你描述的行为,并且切换到(...)修复它“。 – evadeflow