3

当我将路线数据插入 HKWorkoutRouteBuilder 时,出现以下错误:

与名为 com.apple.healthd.server 的服务的连接已中断,但消息是通过附加代理发送的,因此该代理已无效

这是一个代码片段。

    workoutRouteBuilder.insertRouteData(filteredLocations) { (success, error) in
        if !success {
            print("inserting route data failed with error: \(String(describing: error))")
        }
    }

我通过 Speed Sloth 示例的实施进行了模式化。

任何见解将不胜感激!

更新:这里有一些来自观察日志的更多信息。看起来像是某种权限问题,但我还没有找到它:

故障 13:21:14.664262 -0400 来自 pid 1705 的健康连接:警告:在调用接收到的消息、丢弃传入消息并使连接无效期间捕获异常。异常:无效参数不满足:[authorizationStatuses count] == [typesIncludingParentTypes count] 无效参数不满足:[authorizationStatuses count] == [typesIncludingParentTypes count](0 CoreFoundation
0x1dc04d25 + 153 1 libobjc.A.dylib
0x1d227181 objc_exception_throw + 39 2 CoreFoundation
0x1dc04be5 + 1 3 基础
0x1e43c1cd + 93 4 HealthDaemon
0x2edf678f + 2015 5 HealthDaemon
0x2ee6eed1 + 143 6 HealthDaemon
0x2ee6ec77 + 143 7 HealthDaemon
0x2ee7b99b + 485 8 HealthDaemon
0x2f0e1e1f + 143 9 基础
0x1e589393 + 19 10 基础
0x1e587<…>

4

3 回答 3

6

我有同样的问题。您需要确保向用户请求授权:

// Objective C
[HKSeriesType workoutRouteType]

// Swift
HKSeriesType.workoutRoute()
于 2017-08-11T11:03:41.300 回答
2

与名为 com.apple.healthd.server 的服务的连接已中断,但消息是通过附加代理发送的,因此该代理已无效

看到此消息表明处理请求的系统进程已崩溃或退出。您应该向 Apple 提交错误。查找 healthd 崩溃日志并将其包括在内。

于 2017-08-01T21:44:10.810 回答
0

不要忘记在 AppDelegate 中为 HKHealthStore 添加 WorkoutRoute 请求

锻炼路线不适用于模拟器,仅适用于某些 HKWorkoutActivityType,例如 OS4 上的 .walking、.running

private func requestAccessToHealthKit() {

    let healthStore = HKHealthStore()

    let allTypes = Set([HKObjectType.workoutType(),
                        HKObjectType.quantityType(forIdentifier: .activeEnergyBurned)!,
                        HKObjectType.quantityType(forIdentifier: .distanceWalkingRunning)!])
    if #available(watchOS 4.0, *) {
        allTypes.insert(HKSeriesType.workoutRoute())
    }
    healthStore.requestAuthorization(toShare: allTypes, read: allTypes) { (success, error) in
        if !success {
            print(error?.localizedDescription ?? "")
        }
    }
}
于 2017-08-28T17:40:25.330 回答