Свифт протокол называется в цель-не работает - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь заставить этот быстрый протокол работать в объектном файле c, но по какой-то причине функция не вызывается. Я хочу, чтобы didConnect() вызывался при подключении устройства и didDisconnect() вызывался при отключении устройства. Я установил точку останова в CentralManager, подключил функцию и распечатал delegate, он вернулся nil

@objc protocol KestrelDeviceConnectDelegate {
       @objc func didConnect()
       @objc func didDisconnect()
}

@objcMembers
class KestrelDeviceConnect: NSObject{


static let singleton = KestrelDeviceConnect()
public var delegate: KestrelDeviceConnectDelegate?

        func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
                self.isInitialReading = false
                self.kestrelIsConnected = true
                kestrelPeripheral.discoverServices(nil)
                self.delegate?.didConnect()

        }

    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
                self.kestrelIsConnected = false
                self.delegate?.didDisconnect()
            }
        }

в файле цели c

    @interface ViewController ()<KestrelDeviceConnectDelegate> {
        KestrelDeviceConnect<KestrelDeviceConnectDelegate> *_kestrelVC;
      }
        @implementation ViewController

        -(void)viewDidLoad {
            [super viewDidLoad];
             _kestrelVC = [[KestrelDeviceConnect alloc]init];
             [_kestrelVC setDelegate:self];
        }
        -(void)didConnect{
            [[self connectToKestrelButton] setHidden:NO];

            }
}

1 Ответ

0 голосов
/ 01 июля 2019

Скорее всего, вы создаете несколько KestrelDeviceConnect объектов. Один имеет делегата ViewController, и, вероятно, есть другой, который вы фактически используете для чего-либо.

Я подозреваю, что вы имели в виду эту строку, которая создает новый KestrelDeviceConnect:

_kestrelVC = [[KestrelDeviceConnect alloc]init];

быть таким:

_kestrelVC = [KestrelDeviceConnect singleton];
...