即使检索单个iOS ECG测量值和电压数据也会导致应用程序崩溃

e4yzc0pl  于 2023-10-21  发布在  iOS
关注(0)|答案(1)|浏览(140)

我正在尝试检索iOS ECG数据,包括Flutter应用程序中的电压信息。我试过health包和health-kit-reporter包,但是当我试图只检索一个ECG阅读时,两者都崩溃了。我已经跟踪了它们,它们在Swift文件中的let voltageQuery = HKElectrocardiogramQuery(ecgSample) { (query, [result][1]) in行崩溃。当它实际检索数据时(相关的Apple文档在这里)。
每当我这样做,我得到内存错误:

  1. * thread #3, queue = 'com.apple.HealthKit.HKHealthStore.client.0x281d32630', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  2. frame #0: 0x0000000000000000
  3. error: memory read failed for 0x0
  4. Target 0: (Runner) stopped.

我在iPhone 7和iPhone 11上都得到了同样的错误(都运行min。iOS 14)使用各种不同的读数。
有人知道如何避免这种情况发生吗?
我不确定是否有办法检索阅读的一部分,例如,因为我认为应用程序只是在努力处理变量的大小,特别是如果我不请求电压数据,应用程序不会失败。
我的Flutter代码在本例中调用了health-kit-reporter包:

  1. List<Electrocardiogram> electrocardiogramList = [];
  2. electrocardiogramList = await HealthKitReporter.electrocardiogramQuery(
  3. predicate,
  4. withVoltageMeasurements: true);

health-kit-reporter调用HealthKit的Swift代码:

  1. let query = HKSampleQuery(
  2. sampleType: type,
  3. predicate: predicate,
  4. limit: limit,
  5. sortDescriptors: sortDescriptors
  6. ) { (query, data, error) in
  7. guard
  8. error == nil,
  9. let results = data as? [HKElectrocardiogram]
  10. else {
  11. resultsHandler([], error)
  12. return
  13. }
  14. var ecgs: [Electrocardiogram]
  15. switch withVoltageMeasurements {
  16. case true:
  17. ecgs = []
  18. var ecgsError: Error?
  19. let group = DispatchGroup()
  20. for ecgSample in results {
  21. var measurments = [Electrocardiogram.VoltageMeasurement]()
  22. group.enter()
  23. let voltageQuery = HKElectrocardiogramQuery(ecgSample) { (query, result) in
  24. switch(result) {
  25. case .measurement(let voltageMeasurement):
  26. if let measurment = try? Electrocardiogram.VoltageMeasurement(voltageMeasurement: voltageMeasurement) {
  27. measurments.append(measurment)
  28. }
  29. case .done:
  30. if let ecg = try? Electrocardiogram(electrocardiogram: ecgSample, voltageMeasurements: measurments) {
  31. ecgs.append(ecg)
  32. }
  33. group.leave()
  34. case .error(let error):
  35. ecgsError = error
  36. group.leave()
  37. @unknown default:
  38. ecgsError = HealthKitError.notAvailable("Unknown case of Electrocardiogram.VoltageMeasurement result")
  39. group.leave()
  40. }
  41. }
  42. healthStore.execute(voltageQuery)
  43. }
  44. group.notify(queue: .global()) {
  45. resultsHandler(ecgs, ecgsError)
  46. }
  47. case false:
  48. ecgs = Electrocardiogram.collect(results: results)
  49. resultsHandler(ecgs, nil)
  50. }
  51. }

多谢了!

dpiehjr4

dpiehjr41#

我为Cordova(另一个跨平台的移动的应用平台)写了一个类似的函数,遇到了同样的问题。一旦我定义了voltageQuery,它就会在iOS 16.6.1的TestFlight上崩溃(尽管不是后来的操作系统)。
最终我将Xcode从15降级到14.3.1,这解决了崩溃问题。您可以在这里下载旧版本的Xcode:https://developer.apple.com/download/all/您还需要确保下载相应的命令行工具(14.3.1),然后在设置>位置>命令行工具中设置您的Xcode以使用这些工具。
这只是一个临时的修复,但我假设有一个问题,在苹果方面与他们的HealthKit API时,针对旧的iOS版本。希望这能帮助你让你的项目继续下去。

相关问题