我正在尝试检索iOS ECG数据,包括Flutter应用程序中的电压信息。我试过health
包和health-kit-reporter
包,但是当我试图只检索一个ECG阅读时,两者都崩溃了。我已经跟踪了它们,它们在Swift文件中的let voltageQuery = HKElectrocardiogramQuery(ecgSample) { (query, [result][1]) in
行崩溃。当它实际检索数据时(相关的Apple文档在这里)。
每当我这样做,我得到内存错误:
* thread #3, queue = 'com.apple.HealthKit.HKHealthStore.client.0x281d32630', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x0000000000000000
error: memory read failed for 0x0
Target 0: (Runner) stopped.
我在iPhone 7和iPhone 11上都得到了同样的错误(都运行min。iOS 14)使用各种不同的读数。
有人知道如何避免这种情况发生吗?
我不确定是否有办法检索阅读的一部分,例如,因为我认为应用程序只是在努力处理变量的大小,特别是如果我不请求电压数据,应用程序不会失败。
我的Flutter代码在本例中调用了health-kit-reporter
包:
List<Electrocardiogram> electrocardiogramList = [];
electrocardiogramList = await HealthKitReporter.electrocardiogramQuery(
predicate,
withVoltageMeasurements: true);
health-kit-reporter
调用HealthKit的Swift代码:
let query = HKSampleQuery(
sampleType: type,
predicate: predicate,
limit: limit,
sortDescriptors: sortDescriptors
) { (query, data, error) in
guard
error == nil,
let results = data as? [HKElectrocardiogram]
else {
resultsHandler([], error)
return
}
var ecgs: [Electrocardiogram]
switch withVoltageMeasurements {
case true:
ecgs = []
var ecgsError: Error?
let group = DispatchGroup()
for ecgSample in results {
var measurments = [Electrocardiogram.VoltageMeasurement]()
group.enter()
let voltageQuery = HKElectrocardiogramQuery(ecgSample) { (query, result) in
switch(result) {
case .measurement(let voltageMeasurement):
if let measurment = try? Electrocardiogram.VoltageMeasurement(voltageMeasurement: voltageMeasurement) {
measurments.append(measurment)
}
case .done:
if let ecg = try? Electrocardiogram(electrocardiogram: ecgSample, voltageMeasurements: measurments) {
ecgs.append(ecg)
}
group.leave()
case .error(let error):
ecgsError = error
group.leave()
@unknown default:
ecgsError = HealthKitError.notAvailable("Unknown case of Electrocardiogram.VoltageMeasurement result")
group.leave()
}
}
healthStore.execute(voltageQuery)
}
group.notify(queue: .global()) {
resultsHandler(ecgs, ecgsError)
}
case false:
ecgs = Electrocardiogram.collect(results: results)
resultsHandler(ecgs, nil)
}
}
多谢了!
1条答案
按热度按时间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版本。希望这能帮助你让你的项目继续下去。