类未运行

时间:2015-01-06 13:05:20

标签: objective-c bluetooth-lowenergy

我是Xcode和Objective C的新手,但学习速度很快。我正在编写蓝牙LE应用程序来收集来自多个BLE设备的数据。对CoreBluetooth感到满意,并且能够获得我想要的功能并收集数据。

但是,我在AppDelegate中完成了所有操作,现在想要将不同的代码段分成整齐的类。

代码编译好,但除了AppDelegate之外什么都没有运行。

类的示例 - SensorDev.m:

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

@class SensorDev;
@protocol SensorDevDelegate<NSObject>
- (void) sensorDevDidChangeStatus:(SensorDev*)dev;
@end

@interface SensorDev : NSObject

@property (nonatomic, assign, readonly) id<SensorDevDelegate> delegate;
@property (nonatomic, readonly)   CBPeripheral *peripheral;

- (id)initWithPeripheral:(CBPeripheral *)peripheral controller:(id<SensorDevDelegate>)controller;
- (void)start;

@end

类的示例 - SensorDev.h

#import "SensorDev.h"

NSString *SR1Device9DOFServiceUUIDString =        @"346D0000";
NSString *SR1Device9DOFCharacteristicUUIDString =  @"346D0001-12A9-11CF-1279-81F2B7A91332";

@interface SensorDev() <CBPeripheralDelegate> {
    CBService *_temperatureService;
    CBCharacteristic *_temperatureCharacteristic;
}
@end

@implementation SensorDev

#pragma mark - Setup

- (id)initWithPeripheral:(CBPeripheral *)peripheral controller:(id<SensorDevDelegate>)controller
{
    self = [super init];
    if (self) {
        _peripheral = peripheral;
        _peripheral.delegate = self;
        _delegate = controller;
    }
    return self;
}

#pragma mark - Start

// -------------------------------------------------------------------------------
// Startup
// -------------------------------------------------------------------------------

- (void)start
{
    NSLog(@"- (void) start"); //--Debug
    CBUUID  *serviceUUID    = [CBUUID UUIDWithString:SR1Device9DOFServiceUUIDString];
    NSArray *serviceArray   = [NSArray arrayWithObjects:serviceUUID, nil];
    [_peripheral discoverServices:serviceArray];
}


@end

我没有在日志中获得调试行:

    NSLog(@"- (void) start"); //--Debug

寻找帮助的人......我想念的是什么......提前感谢....

更新

所以我有第二个类完成所有CoreBluetooth设置和发现

Discovery.h

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
#import "SensorDev.h"

// -------------------------------------------------------------------------------
//UI Setup/Protocols
// -------------------------------------------------------------------------------
@protocol DiscoveryDelegate <NSObject>
- (void) discoveryDidRefresh;
- (void) discoveryStatePoweredOff;
@end

@interface Discovery : NSObject

+(Discovery*) sharedInstance;

@property (nonatomic, assign) id<DiscoveryDelegate> discoveryDelegate;
@property (nonatomic, assign) id<SensorTagDelegate> peripheralDelegate;

// -------------------------------------------------------------------------------
//  Actions
// -------------------------------------------------------------------------------
- (void) startScanningForUUIDString:(NSString *)uuidString;
- (void) stopScanning;
- (void) connectPeripheral:(CBPeripheral*)peripheral;
- (void) disconnectPeripheral:(CBPeripheral*)peripheral;

// -------------------------------------------------------------------------------
//  Access to the devices
// -------------------------------------------------------------------------------
@property (readonly, nonatomic) NSMutableArray    *foundPeripherals;
@property (retain, nonatomic) NSMutableArray    *connectedPeripherals;

@end

Discover.m(摘录)

#import "Discovery.h"

extern NSString *SR1Device9DOFServiceUUIDString; //346D0000
extern NSString *SR1Device9DOFCharacteristicUUIDString; //346D0001-12A9-11CF-1279-81F2B7A91332

@interface Discovery() <CBCentralManagerDelegate, CBPeripheralDelegate> {
    CBCentralManager    *_centralManager;
    BOOL _pendingInit;
}
@end

@implementation Discovery

#pragma mark - Setup

+ (Discovery*) sharedInstance
{
    static Discovery *this = nil;

    if (!this)
        this = [[Discovery alloc] init];

    return this;
}

- (id) init
{
    self = [super init];
    if (self) {
        _pendingInit = YES;
        _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:nil];
        _foundPeripherals = [[NSMutableArray alloc] init];
        _connectedPeripherals = [[NSMutableArray alloc] init];
    }
    return self;
}

#pragma mark - CoreBluetooth Services

// -------------------------------------------------------------------------------
// CoreBluetooth Start/Stop Scanning
// -------------------------------------------------------------------------------

- (void)startScanningForUUIDString:(NSString *)uuidString
{
    NSLog(@"- (void) startScanningForUUIDString"); //--Debug
    [_centralManager scanForPeripheralsWithServices:
     [NSArray arrayWithObjects:SR1Device9DOFServiceUUIDString, nil] options:nil];
}

- (void)stopScanning
{
    NSLog(@"- (void) stopScanning"); //--Debug
}

// -------------------------------------------------------------------------------
// CoreBluetooth Connect/Disconnect
// -------------------------------------------------------------------------------

- (void) connectPeripheral:(CBPeripheral*)peripheral
{
    NSLog(@"- (void) connectPeripheral"); //--Debug
    if (peripheral.state == CBPeripheralStateDisconnected) {
        [_centralManager connectPeripheral:peripheral options:nil];
    }
}


- (void) disconnectPeripheral:(CBPeripheral*)peripheral
{
    NSLog(@"- (void) disconnectPeripheral"); //--Debug
    [_centralManager cancelPeripheralConnection:peripheral];
}

- (void) centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {

    NSLog(@"- (void) didConnectPeripheral"); //--Debug

    SensorDev    *tag   = nil;
    // Create a service instance.
    tag = [[SensorDev alloc] initWithPeripheral:peripheral controller:_peripheralDelegate];
    [tag start];

    if (![_connectedPeripherals containsObject:tag])
        [_connectedPeripherals addObject:tag];

    [_peripheralDelegate sensorTagDidChangeStatus:tag];
    [_discoveryDelegate discoveryDidRefresh];
}

这也没有运行...

1 个答案:

答案 0 :(得分:0)

这些类没有运行的原因,因为没有任何东西在调用它们。与视图控制器关联的类未调用该类:

BLEController.h

#import <Foundation/Foundation.h>

@interface BLEController : NSObject {
enter code here
NSMutableArray *_periphralItems;

}

@end

BLEController.m

#import "SensorDev.h"
#import "Discovery.h"
#import "BLEController.h"

@interface BLEController() <DiscoveryDelegate, SensorTagDelegate>
{
    BOOL _selfSelection;
}

@end

@implementation BLEController

- (void)awakeFromNib
{
    [[Discovery sharedInstance] setDiscoveryDelegate:self];
    [[Discovery sharedInstance] setPeripheralDelegate:self];
    _periphralItems = [NSMutableArray new];
}

- (void) discoveryDidRefresh
{
}

- (void) discoveryStatePoweredOff
{
}

- (void)sensorTagDidChangeStatus:(SensorTag *)tag
{
    if(tag.peripheral.state == CBPeripheralStateConnected) {
        //Do something
    }
}

@end

awakeFromNib允许我调用其他类....