【问题标题】:kCBAdvDataManufacturerData data format changed in iOS 13?iOS 13 中的 kCBAdvDataManufacturerData 数据格式发生了变化?
【发布时间】:2020-01-27 14:35:46
【问题描述】:

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

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

但在 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 错误。

【问题讨论】:

  • 格式没有改变,只是当你printData的实例时得到的输出。展示您如何访问数据。
  • stackoverflow.com/questions/58128802/… 查看 cmets。 NSDatadescription 已更改。在产品中使用它从来都不是一个好的解决方案。
  • 我没有使用描述。我做错了什么?
  • NSString *manufacturerString = [NSString stringWithFormat:@"%@", manufacturerData]; 那叫description。克利里。

标签: objective-c core-bluetooth ios13


【解决方案1】:

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

根据您上面的代码,您可以提取manufacturerData 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)}
    }
}

【讨论】:

    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 2018-07-18
    • 2012-02-12
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多