centralManagerDidUpdateState未被调用

时间:2016-03-15 18:51:22

标签: ios xcode bluetooth-lowenergy cbperipheral cbperipheralmanager

我不是iOS编码的新手,但对于iOS中的BLE来说却是新手。

我已成功在主视图控制器中编写代码来访问和写入BLE设备。所以外围和经理的所有东西都经过测试。

我的应用程序将获得一个BLE设备列表,连接到它们以获取序列号,断开它们,然后将它们放在tableView中。当用户选择一个时,我需要转到另一个视图并重新连接。我想写另一个类作为连接到外设的实用程序,我成功传递给实用程序并在实用程序中读取和写入它。 peripheral.state已连接。

每当我尝试写入外设时,我的代码崩溃了。然而,外围设备报告数据已写入。

因此,为了弄清楚出了什么问题,我开始尝试用相同的结果读取外设,Crash。

我在实用程序中启动了一个新的管理器,并且没有调用centralManagerDidUpdateState。我也尝试过,没有经理认为如果我知道外围设备,它就会起作用。

那么,我如何让centralManager在新课程中工作?你是否必须以某种方式阻止主要班级的经理?

- (void)getPeripheralStatus:(CBPeripheral *)peripheral{

device_Info_UUID = [CBUUID UUIDWithString:kDevice_Info_SID];
security_UUID = [CBUUID UUIDWithString:kSecurity_SID];
status_UUID = [CBUUID UUIDWithString:kStatus_SID];
device_ID_char_UUID =[CBUUID UUIDWithString:kSecurity_char_DeviceID];

SHA256in = [[NSMutableString alloc]initWithString:lockMasterKey];

mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

peripheral.delegate = self;
[self.mgr connectPeripheral:peripheral options:nil];

这行是在主控制器中工作但不在我的工具中。

 [self.lock writeValue:myID forCharacteristic:charac type:CBCharacteristicWriteWithResponse];

谢谢!

1 个答案:

答案 0 :(得分:-1)

我不确定将外围设备传递到其他视图控制器是一个好主意"除非您不需要进一步更新外围设备。如果你想要一个新鲜的"多视图控制器中的外围设备我建议使用单例设计,这样您就可以同时处理所有代理并减少冗余代码。

我找到的示例代码。 https://github.com/kickingvegas/YmsCoreBluetooth