未找到 CBCentralManagerDelegate didRetrievePeripherals
CBCentralManagerDelegate didRetrievePeripherals not found
我正在尝试在部署目标为 10.12 的 MacOS 上的 Swift 中实现 Apple 在 Objective-C 中编写的示例代码。示例可在此处找到以供参考:Heart Rate Monitor
在实现时,我遇到了 CentralManager: didRetrievePeripherals 回调无法实现的问题。我检查了我的 ViewController 实现的 CBCentralManagerDelegate 和 CBPheripheralDelegate 协议,其中 none 包含这样的方法。我能找到的唯一方法是:
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()
}
}
...
}
谢谢
从 Apple changelog 我们可以得知 centralManager: didRetrievePeripherals
方法已在 iOS 9 中删除。因此,如果您将 xcode 与最新的 SKD 一起使用,则此方法不包含在它。
我正在尝试在部署目标为 10.12 的 MacOS 上的 Swift 中实现 Apple 在 Objective-C 中编写的示例代码。示例可在此处找到以供参考:Heart Rate Monitor
在实现时,我遇到了 CentralManager: didRetrievePeripherals 回调无法实现的问题。我检查了我的 ViewController 实现的 CBCentralManagerDelegate 和 CBPheripheralDelegate 协议,其中 none 包含这样的方法。我能找到的唯一方法是:
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()
}
}
...
}
谢谢
从 Apple changelog 我们可以得知 centralManager: didRetrievePeripherals
方法已在 iOS 9 中删除。因此,如果您将 xcode 与最新的 SKD 一起使用,则此方法不包含在它。