CBCentralManagerDelegate didRetrievePeripherals not found

时间:2018-03-14 10:44:54

标签: swift macos-sierra cbcentralmanager

我正在尝试使用部署目标10.12在MacOS上的Swift中实现用Objective-C编写的Apple示例代码。可以在此处找到该示例以供参考:DRFs SessionAuthentication

在实现时,我遇到了一个问题,即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()
        }
    }
...
}

谢谢

1 个答案:

答案 0 :(得分:0)

Apple changelog我们可以在iOS 9中删除centralManager: didRetrievePeripherals方法。因此,如果您使用xcode和最新的SKD,则此方法不包含在其中。