Предупреждение Objective-C: класс ViewController не соответствует протоколу CBPeripheralManagerDelegate.

Я пытаюсь создать виртуальное периферийное приложение Obj-C, CoreBluetooth и получаю это предупреждение.

//
//  ViewController.h
//  sim_backend_empty3
//
//

#import <UIKit/UIKit.h>
#import <CoreBluetooth/CoreBluetooth.h>

@interface ViewController : UIViewController  <CBPeripheralManagerDelegate>

@property (nonatomic, strong) CBPeripheralManager *peripheralManager;

@end


//
//  ViewController.m
//  sim_backend_empty3
//
//

#import "ViewController.h"

@implementation ViewController   >>>>>>>>>> WARNING >>>>>>>>>>   Class 'ViewController' does not conform to protocol 'CBPeripheralManagerDelegate'

- (void)viewDidLoad {
    [super viewDidLoad];
}

-(void)start_BLE_advertisements
{
    [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];
    
}


@end

person Doug Null    schedule 11.11.2020    source источник
comment
как только вы читаете delegate в коде и устанавливаете его self, вам нужно реализовать его методы в том же самом классе. нажмите, удерживая клавишу cmd, на CBPeripheralManagerDelegate-› перейдите к определению и прочитайте. вернитесь к своему классу impl. установите курсор между @impl и @end и введите, например, -pe, посмотрите, что произойдет.   -  person Ol Sen    schedule 11.11.2020
comment
Отвечает ли это на ваш вопрос? Класс не соответствует CBPeripheralManagerDelegate в Swift   -  person koen    schedule 11.11.2020


Ответы (2)


Вам необходимо реализовать требуемый метод протокола CBPeripheralManagerDelegate:

peripheralManagerDidUpdateState:

как указано в документации здесь: https://developer.apple.com/documentation/corebluetooth/cbperipheralmanagerdelegate?language=objc

Протоколу требовался один метод,ferryManagerDidUpdateState:, который Core Bluetooth вызывает всякий раз, когда обновляется состояние диспетчера периферийных устройств, чтобы указать, доступен ли диспетчер периферийных устройств.

person R4N    schedule 11.11.2020

Вы можете проверить пример Objective-C о том, как настроить CoreBluetooth, используя этот репозиторий:

https://github.com/LGBluetooth/LGBluetooth

Раньше, когда я все еще кодировал в ObjC, я использовал эту библиотеку, и она была довольно хороша.

По крайней мере, это даст вам некоторые идеи о том, как вы должны реализовывать интерфейсы.

Вот реализация Swift того, что вы пытаетесь сделать (на основе вашего другого вопроса, заданного несколько дней назад). Может быть, вы можете сделать его обратно в ObjC (отказ от ответственности: я автор).

https://github.com/RobotPajamas/SwiftyTeeth/blob/master/Sources/SwiftyTooth/SwiftyTooth.swift

person SJoshi    schedule 14.11.2020