Я пытаюсь реализовать образец кода Apple, написанный на Objective-C, в Swift на MacOS с целью развертывания 10.12. Образец можно найти здесь для справки: Монитор сердечного ритма

При реализации я столкнулся с проблемой, из-за которой обратный вызов CentralManager: didRetrievePeripherals не может быть реализован. Я проверил протоколы CBCentralManagerDelegate и CBPheripheralDelegate, которые реализует мой ViewController, и ни один из них не содержит такого метода. Единственные методы, которые я могу найти:

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()
        }
    }
...
}

Спасибо

0
jms 14 Мар 2018 в 13:44

1 ответ

Лучший ответ

Мы можем получить это из журнала изменений Apple { Метод {X0}} был удален в iOS 9. Поэтому, если вы используете xcode с последней версией SKD, этот метод в него не включен.

0
Taras Chernyshenko 14 Мар 2018 в 14:09