Home Articles

BLE特性未保留

Asked
Viewed 1300 times
0

我正在编写一个与多个(5到10个)相同的BLE设备进行通信的应用程序 . 每个BLE设备都有多个特性,一些是静态的,一些是更新的,另一些则可以写入 .

该应用程序在导航控制器中嵌入了多个ViewController,适用于IOS设备(特别是IOS 8和iPhone 6) .

为了使程序高效并与CoreBluetooth一起工作,我已经创建了类来管理BLE交互:

  • BLE控制类 - 扫描并连接正确的BLE设备 .

  • BLE服务类 - 连接后扫描特征并根据其类型进行适当设置 .

然后,由外围设备发送并由管理器接收的已知连接特征的数据存储在后端SQLite数据库中 .

我面临的问题是回写连接外设的特性 . 我已经收集了CBC特性中的特征,但是当我尝试写入CBC特性的值为NULL时,它不会在类中持续存在 .

以下是我使用的代码的摘要:

BLEServicesClass中的CBC特性定义

#import "BLEServicesClass.h"
#import "BLEControlClass.h"

NSString *srModeUUIDString = @"346D0003-12A9-11CF-1279-81F2B7A91332";

@interface BLEServicesClass() <CBPeripheralDelegate> {

@private
    CBPeripheral        *servicePeripheral;
    CBCharacteristic    *srModeCharacteristic;
@end

didDiscoverCharacteristicForService

- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error;
{

    NSArray     *characteristics    = [service characteristics];
    CBCharacteristic *characteristic;

        if ([[characteristic UUID] isEqual:srModeUUID]) {
            NSLog(@"didDiscoverServices - Mode Characteristic");
            srModeCharacteristic = characteristic;
        }

写一个特征

-(void)writeCharacteristic:(CBCharacteristic *)whichCharacteristic data:(NSData*)data device:(NSString *)device
{

    NSArray   *devices;
    devices = [[BLEControlClass sharedInstance] connectedPeripherals];

    int i;
    for (i = 0; i < [[[BLEControlClass sharedInstance] connectedPeripherals] count]; i++) {
        CBPeripheral *peripheral=[[[BLEControlClass sharedInstance] connectedPeripherals] objectAtIndex:i];
        peripheral.delegate=self;
        NSString *tesfordevice = peripheral.name;

        if (tesfordevice == device) {
            [whichCharacteristic.service.peripheral writeValue:data forCharacteristic:whichCharacteristic type:CBCharacteristicWriteWithResponse];
        }
    }
}

这称为:

-(void)writeModeCharacteristic:(NSData*)data :(NSString *)device
{
    [self writeCharacteristic:srModeCharacteristic data:data device:device];
}

我的问题是srModeCharacteristic最初在发现时正确设置但后来为NULL .

有什么帮助吗?

1 Answer

  • 0

    像我在我的应用程序中所做的那样创建一个BLE单例类 . 只要应用程序处于运行状态,它就会在整个应用程序生命周期中保持特征值 .

Related