为什么这个条件会导致错误?

VK1

我有一个包含一些条件的方法。第一个条件工作正常,不会引起任何问题。但是,第二个导致应用程序崩溃。

- (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
}

有条件的

if (cmdType == GaiaCommand_GetCurrentBatteryLevel && requestPayload.length > 1)

工作没有问题。

然而,有条件的

else if (cmdType == GaiaCommand_GET_FBC && requestPayload.length > 1)

在 xcode 中导致以下警告

隐式转换失去整数精度:'NSInteger'(又名'long')到'int'

另外,我在调试器中也看到了错误信息

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[_NSInlineData getBytes:range:]: 范围 {1, 2} 超出

数据长度 2'

肯·托马斯

想想这告诉你什么:

Terminating app due to uncaught exception 'NSRangeException', reason:
'-[_NSInlineData getBytes:range:]: range {1, 2} exceeds data length 2'

您的数据对象的长度为 2 个字节。位置 0 处的第一个字节是(根据您的代码)success值。这样就在位置 1 处再留下一个字节来处理。但是您的代码试图从中复制 2 个字节——这就是range {1, 2}消息中的内容;从位置 1 开始,长度为 2 的范围。您正在阅读数据的末尾。

您必须检查数据是否有足够的数据来满足-getBytes:...您尝试拨打的电话。您可能还需要更正关于缓冲区中取消模式值应该有多大的假设,因为它显然比您预期的要小。您的代码假定它是uint16_t(2 个字节),但数据中只剩下一个字节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这个茉莉花间谍会导致错误?

来自分类Dev

为什么这个双变量会导致分段错误?

来自分类Dev

为什么嵌套XPATH条件中的函数会导致错误?

来自分类Dev

为什么会导致错误?

来自分类Dev

为什么这个 AVX 内在会导致“分段错误”,而不是 GCC?

来自分类Dev

为什么这个“else”会返回错误?

来自分类Dev

为什么矢量会导致细分错误?

来自分类Dev

为什么这个简单的getInteger函数会导致流失败?

来自分类Dev

为什么这个while循环会导致无限循环?

来自分类Dev

为什么这个jQuery会导致我的jQuery全部失败?

来自分类Dev

为什么这个while循环会导致无限循环?

来自分类Dev

为什么这个简单的LISP函数会引发错误?

来自分类Dev

为什么这个 activerecord find 查询会抛出错误?

来自分类Dev

为什么这个 Python 代码会引发错误?

来自分类Dev

为什么这个 partialFilterExpression 会抛出错误?

来自分类Dev

为什么此代码会导致分段错误

来自分类常见问题

为什么?:会导致转换错误,而if-else不会?

来自分类常见问题

为什么00.0会导致语法错误?

来自分类Dev

为什么通过元组会导致熊猫出现关键错误?

来自分类Dev

:k [False]为什么会导致GHCI错误?

来自分类Dev

为什么getPrototype方法调用会导致错误?

来自分类Dev

为什么在JavaScript中10 === 010会导致错误

来自分类Dev

为什么此代码会导致“需要对象”错误?

来自分类Dev

为什么与pthread链接会导致分段错误?

来自分类Dev

为什么此XSD验证会导致错误

来自分类Dev

为什么此功能会导致段错误?

来自分类Dev

为什么释放内存会导致分段错误?

来自分类Dev

为什么使用char **会导致char *工作的段错误?

来自分类Dev

为什么此表达式会导致SQL错误?

Related 相关文章

  1. 1

    为什么这个茉莉花间谍会导致错误?

  2. 2

    为什么这个双变量会导致分段错误?

  3. 3

    为什么嵌套XPATH条件中的函数会导致错误?

  4. 4

    为什么会导致错误?

  5. 5

    为什么这个 AVX 内在会导致“分段错误”,而不是 GCC?

  6. 6

    为什么这个“else”会返回错误?

  7. 7

    为什么矢量会导致细分错误?

  8. 8

    为什么这个简单的getInteger函数会导致流失败?

  9. 9

    为什么这个while循环会导致无限循环?

  10. 10

    为什么这个jQuery会导致我的jQuery全部失败?

  11. 11

    为什么这个while循环会导致无限循环?

  12. 12

    为什么这个简单的LISP函数会引发错误?

  13. 13

    为什么这个 activerecord find 查询会抛出错误?

  14. 14

    为什么这个 Python 代码会引发错误?

  15. 15

    为什么这个 partialFilterExpression 会抛出错误?

  16. 16

    为什么此代码会导致分段错误

  17. 17

    为什么?:会导致转换错误,而if-else不会?

  18. 18

    为什么00.0会导致语法错误?

  19. 19

    为什么通过元组会导致熊猫出现关键错误?

  20. 20

    :k [False]为什么会导致GHCI错误?

  21. 21

    为什么getPrototype方法调用会导致错误?

  22. 22

    为什么在JavaScript中10 === 010会导致错误

  23. 23

    为什么此代码会导致“需要对象”错误?

  24. 24

    为什么与pthread链接会导致分段错误?

  25. 25

    为什么此XSD验证会导致错误

  26. 26

    为什么此功能会导致段错误?

  27. 27

    为什么释放内存会导致分段错误?

  28. 28

    为什么使用char **会导致char *工作的段错误?

  29. 29

    为什么此表达式会导致SQL错误?

热门标签

归档