首页 > 解决方案 > iOS 13 中的 kCBAdvDataManufacturerData 数据格式发生了变化?

问题描述

在 iOS 13 上使用我的应用程序时,制造商数据已更改格式。

在 iOS 12 中访问 kCBAdvDataManufacturerData 时,我得到以下格式:

<13376400>

但在 iOS 13 中,我得到了这种格式:

{长度 = 4,字节 = 0x13376400}

有谁知道为什么这会改变?

如何将“1337”部分检索为字符串?

这就是我访问和打印数据的方式:

    NSData *manufacturerData = [advertisementData objectForKey:kCBAdvDataManufacturerData];
    NSString *manufacturerString = [NSString stringWithFormat:@"%@", manufacturerData];
    NSString *companyIdentifier = [manufacturerString substringWithRange:NSMakeRange(1, 4)];
    NSLog(@"%@", companyIdentifier);

打印:长

我尝试了manufacturerData.bytes,但它给了我EXC_BAD_ACCESS 错误。

标签: objective-ccore-bluetoothios13

解决方案


自 iOS 13 起,对 的描述kCBAdvDataManufacturerData NSData已更改。为了能够提取和解析advertisementData你不应该再基于description。以下是适用于 iOS 13 和旧 iOS 版本的 Swift 解决方案版本:

根据您上面的代码,您可以提取制造商数据NSData

let publicData = Data(bytes: manufacturerData.bytes, count: Int(manufacturerData.length))

let publicDataAsHexString = publicData.dataToHexString // this result is same what ever the iOS version.

//// Data extension
extension Data {
    var dataToHexString: String {
        return reduce("") {$0 + String(format: "%02x", $1)}
    }
}

推荐阅读