Estoy usando una biblioteca que tiene la capacidad de extraer datos de un dispositivo BLE y colocarlos en NSData. Sin embargo, necesito extraer las líneas individuales de datos en ints. ¿Cómo hago esto?

Aquí está el código:

- (void)realDataCallBackWithData:(NSData *)realData{
      if (realData == nil) {
              DLog(@"error");
              return;
      }
      VTRealObject *rObj = [VTO2Parser parseO2RealObjectWithData:realData];
      self.descLab.text = [rObj description];
}

- (UILabel *)descLab{
      if (!_descLab) {
              _descLab =  elalloc initWithFrame:[UIScreen mainScreen].bounds];
              _descLab.numberOfLines = 0;
              _descLab.textAlignment = NSTextAlignmentCenter;
              [self.view addSubview:_descLab];
      }
      return _descLab;
}

Aquí está el código de la biblioteca VTO2Parser.h:

#import <Foundation/Foundation.h>
#import "VTO2Info.h"
#import "VTO2Object.h"
#import "VTO2WaveObject.h"
#import "VTRealObject.h"

NS_ASSUME_NONNULL_BEGIN

@interface VTO2Parser : NSObject

// @brief parse O2 information
// @param infoData infoData from peripheral
+ (VTO2Info *)parseO2InfoWithData:(NSData * _Nonnull)infoData;

// @brief parse O2 object
// @param fileData fileData from peripheral
+ (VTO2Object *)parseO2ObjectWithData:(NSData * _Nonnull)fileData;

// @brief parse O2 Wave array .
// @param waveData waveData from   VTO2Object
+ (NSArray <VTO2WaveObject *>*)parseO2WaveObjectArrayWithWaveData:(NSData * 
_Nonnull)waveData;

// @brief parse O2 Real-time data
// @param realData realData from peripheral
+ (VTRealObject *)parseO2RealObjectWithData:(NSData *)realData;

// @brief parse O2 Real PPG data
// @param realPPG real PPG data from peripheral
+ (NSArray <VTRealPPG *>*)parseO2RealPPGWithData:(NSData *)realPPG;

@end

NS_ASSUME_NONNULL_END

Y también aquí está el VTO2Object.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface VTRealObject : NSObject

// @brief blood oxygen value
@property (nonatomic, assign) u_char spo2;

// @brief heart rate
@property (nonatomic, assign) u_short hr;

// @brief battery value
@property (nonatomic, assign) u_char battery;

// @brief battery status
@property (nonatomic, assign) u_char batState;

// @brief Perfusion Index value
@property (nonatomic, assign) u_char pi;

// @brief lead status . for BabyO2:       0: Probe off     1: Lead normal       2: Lead off
@property (nonatomic, assign) u_char leadState;

// @brief motion value
@property (nonatomic, assign) u_char vector; 

@end


@interface VTRealPPG : NSObject

// @brief Infrared
@property (nonatomic, assign) int ir;

// @brief RLED
@property (nonatomic, assign) int red;

// @brief motion
@property (nonatomic, assign) u_char motion;

@end


NS_ASSUME_NONNULL_END

El resultado final dentro de la aplicación se ve así:

- {batState = 0; batería = 66; hr = 76; leadState = 1; pi = 20; spo2 = 98; vector = 0;}

¿Cómo puedo separar el Int de los datos anteriores para poder asignarlo a etiquetas individuales?

-1
Ultra_charge 24 ago. 2020 a las 16:46

1 respuesta

La mejor respuesta

Es posible que su VTRealObject rObj ya contenga todos los valores que desea y se los entregará como propiedades o valores de retorno de método.

Si no, entonces necesita hacer exactamente lo que su VTO2Parser ya está haciendo: mirar directamente el realData y analizarlo, encontrar los valores que contiene e interpretarlos. Para eso, debes conocer el formato del realData. Entonces la tarea es fácil. Por ejemplo, si sabe que los primeros dos o cuatro bytes de realData son un long que representa el batState, es trivial leerlos como long. Y así.

0
matt 24 ago. 2020 a las 13:59