【问题标题】:Swift protocol called in objective-c not working在objective-c中调用的Swift协议不起作用
【发布时间】:2019-07-01 17:52:24
【问题描述】:

我试图让这个快速协议在一个目标 c 文件中工作,但由于某种原因该函数没有被调用。我希望在设备连接时调用didConnect(),并在设备断开连接时调用didDisconnect()。我在centralManager 中设置了一个断点做connect 函数并打印出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];

            }
}

【问题讨论】:

    标签: ios objective-c swift protocols


    【解决方案1】:

    您很可能创建了多个 KestrelDeviceConnect 对象。一个有一个ViewController 的代表,很可能还有另一个你实际用于任何事情。

    我怀疑你的意思是这一行,它创建了一个新的 KestrelDeviceConnect:

    _kestrelVC = [[KestrelDeviceConnect alloc]init];
    

    变成这样:

    _kestrelVC = [KestrelDeviceConnect singleton];
    

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      相关资源
      最近更新 更多