You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WWDC ResearchKit+CareKit添加ORKTextChoice后提取答案报错

问题解决:ResearchKit单选问卷答案提取失败及数值存储方案

问题根源

  1. 结果类型不匹配:滑动量表的结果是ORKScaleQuestionResult,但单选问卷的结果是ORKChoiceQuestionResult,原代码仅提取scaleResults,导致无法找到单选答案,触发断言失败。
  2. 标识符赋值错误:最后给breathValue的kind赋值时,错误使用了睡眠项的标识符,会导致后续数据分类混乱。

修复代码

修改extractAnswersFromCheckInSurvey函数如下:

static func extractAnswersFromCheckInSurvey(
    _ result: ORKTaskResult) -> [OCKOutcomeValue]? {
        
        guard
            let response = result.results?
                .compactMap({ $0 as? ORKStepResult })
                .first(where: { $0.identifier == checkInFormIdentifier }),
            
            // 同时提取滑动量表和单选问卷的结果
            let scaleResults = response.results?.compactMap({ $0 as? ORKScaleQuestionResult }),
            let choiceResults = response.results?.compactMap({ $0 as? ORKChoiceQuestionResult }),
            
            let painAnswer = scaleResults
                .first(where: { $0.identifier == checkInPainItemIdentifier })?
                .scaleAnswer,
            
            let sleepAnswer = scaleResults
                .first(where: { $0.identifier == checkInSleepItemIdentifier })?
                .scaleAnswer,
            
            // 从单选结果集中获取选中值
            let breathAnswer = choiceResults
                .first(where: { $0.identifier == TextChoiceQuestionStep })?
                .choiceAnswers?.first as? NSNumber
                
        else {
            assertionFailure("Failed to extract answers from check in survey!")
            return nil
        }
        
        var painValue = OCKOutcomeValue(Double(truncating: painAnswer))
        painValue.kind = checkInPainItemIdentifier
        
        var sleepValue = OCKOutcomeValue(Double(truncating: sleepAnswer))
        sleepValue.kind = checkInSleepItemIdentifier
        
        var breathValue = OCKOutcomeValue(Double(truncating: breathAnswer))
        // 修正为单选问卷的标识符
        breathValue.kind = TextChoiceQuestionStep
        
        return [painValue, sleepValue, breathValue]
    }

关键修改说明

  • 新增choiceResults提取单选类型的问卷结果,与scaleResults分开处理
  • 通过choiceAnswers?.first获取单选选中的数值(单选场景下只会有一个选中值)
  • 将breathValue.kind修正为TextChoiceQuestionStep,确保数据存入CareKit时分类正确,后续可直接用于图表生成

内容的提问来源于stack exchange,提问作者Fitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:21:31