NSData length - 隐式转换失去整数精度

时间:2016-03-24 14:17:25

标签: ios objective-c bluetooth-lowenergy

我有一点我不明白的问题。

我在互联网上看了,但我看不出我的错误在哪里。

id manufacturerData = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];
if (manufacturerData) {
    const uint8_t *bytes = [manufacturerData bytes];
    int len = [manufacturerData length];
    // skip manufacturer uuid
    NSData *data = [NSData dataWithBytes:bytes+2 length:len-2];
  

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

1 个答案:

答案 0 :(得分:1)

请注意,您的manufacturerData变量的类型应为NSData,而不是id

查看NSData的文档。 length属性的返回类型是什么?现在看看你正在使用的类型。看到区别?

始终使用正确的数据类型。

您也可以使用subdataWithRange:方法而不是字节。

NSData *manufacturerData = [advertisementData objectForKey:CBAdvertisementDataManufacturerDataKey];
if (manufacturerData) {
    NSUInteger len = [manufacturerData length];
    // skip manufacturer uuid
    NSRange *dataRange = NSMakeRange(2, len - 2);
    NSData *data = [manufacturerData subdataWithRange:dataRange];
}