【问题标题】:CBCentralManagerDelegate didRetrievePeripherals not foundCBCentralManagerDelegate didRetrievePeripherals not found
【发布时间】:2018-08-22 20:36:58
【问题描述】:

我正在尝试在部署目标为 10.12 的 MacOS 上用 Swift 中的 Objective-C 编写 Apple 的示例代码。该示例可以在这里找到以供参考:Heart Rate Monitor

在实施时,我遇到了 CentralManager: didRetrievePeripherals 回调无法实施的问题。我已经检查了我的 ViewController 实现的 CBCentralManagerDelegate 和 CBPheripheralDelegate 协议,它们都不包含这样的方法。我能找到的唯一方法是:

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?)
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)
func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any])
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) 

我不太确定这里出了什么问题。我检查了 Apple 的 Objective-C 版本并查看了在那里实现的两个委托,但在协议定义中没有看到任何表明我可以实现以下功能的内容:

- (void)centralManager:(CBCentralManager *)central didRetrievePeripherals:(NSArray *)peripherals
{
    ...
} 

但是他们已经在 CBCentralManagerDelegates 集合下实现了这一点,并且项目构建没有问题。这怎么可能?

我的实现参考如下:

import Cocoa
import CoreBluetooth
import QuartzCore

class ViewController: NSViewController, CBPeripheralDelegate, CBCentralManagerDelegate {

    var manager: CBCentralManager?
    var peripheral: CBPeripheral?
    var autoconnect = true
    let arrayController: NSArrayController = NSArrayController()
    var heartRateMonitors = NSMutableArray()
    let scanSheet: NSWindow = NSWindow()

    //MARK: IBOutlets
    @IBOutlet weak var connectButton: NSButton!
    @IBOutlet weak var indicatorButton: NSButton!
    @IBOutlet weak var progressIndicator: NSProgressIndicator!


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.


        manager = CBCentralManager(delegate: self, queue: nil)
        if autoconnect {
            startScan()
        }
    }
...
}

谢谢

【问题讨论】:

标签: swift macos-sierra cbcentralmanager


【解决方案1】:

Apple changelog 我们可以得到centralManager: didRetrievePeripherals 方法在iOS 9 中被删除了。所以如果你使用带有最新SKD 的xcode,这个方法不包含在其中。

【讨论】:

  • 谢谢。您能否指导我了解 Apple 建议的替代方案或他们弃用此功能的任何理由,以便我可以弄清楚如何在没有它的情况下工作
  • 您可以在此处关注 raywenderlich 的博文:raywenderlich.com/177848/…
  • 是的.. 但那是一个 iOS 教程。两种实现方式相同吗?
  • mac os 和 iOS 使用相同的 Core Bluetooth SDK,因此它们的委托实现应该相同。您可以参考 raywenderlich 教程中关于如何设置蓝牙的参考,但是其他的,比如在 UITableVIew/NSTableView 上显示结果,会有所不同
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
  • 2015-06-27
相关资源
最近更新 更多