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

e4yzc0pl  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(107)

我正在尝试检索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)
            }
        }

多谢了!

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版本。希望这能帮助你让你的项目继续下去。

相关问题