У меня есть метод, который содержит несколько условных выражений. Первый условный работает нормально и не вызывает никаких проблем. Однако второй вызывает сбой приложения.
- (void)didReceiveGaiaGattResponse:(CSRGaiaGattCommand *)command
{
GaiaCommandType cmdType = [command getCommandId];
NSData *requestPayload = [command getPayload];
uint8_t success = 0;
NSLog(@"cmdType: %li", (long)cmdType);
[requestPayload getBytes:&success range:NSMakeRange(0, sizeof(uint8_t))];
if (cmdType == GaiaCommand_GetCurrentBatteryLevel && requestPayload.length > 1)
{
uint16_t value = 0;
[requestPayload getBytes:&value range:NSMakeRange(1, sizeof(uint16_t))];
NSInteger battery = CFSwapInt16BigToHost(value);
[self sendEventWithName:someDEVICE_BATTERY_CHANGED body:@{@"batteryLevel":[NSNumber numberWithInteger:battery]}];
return;
}
else if (cmdType == GaiaCommand_GET_FBC && requestPayload.length > 1)
{
uint16_t value = 0;
[requestPayload getBytes:&value range:NSMakeRange(1, sizeof(uint16_t))];
NSInteger feedbackCancellationMode = CFSwapInt16BigToHost(value);
[self sendEventWithName:FEEDBACK_CANCELLATION_MODE body:@{@"feedbackCancellationMode": [NSNumber numberWithInt:feedbackCancellationMode]}];
return;
}
//do more stuff
}
условное
если (cmdType == GaiaCommand_GetCurrentBatteryLevel && requestPayload.length > 1)
работает без проблем.
Тем не менее, условно
иначе если (cmdType == GaiaCommand_GET_FBC && requestPayload.length > 1)
вызывает следующее предупреждение в xcode
Неявное преобразование теряет целочисленную точность: «NSInteger» (он же «long») в «int»
Кроме того, я также видел сообщение об ошибке в отладчике
* Завершение работы приложения из-за необработанного исключения "NSRangeException", причина: "* -[_NSInlineData getBytes:range:]: диапазон {1, 2} превышает
длина данных 2'