ios - CareKit 和 ResearchKit 冲突

标签 ios iphone swift researchkit carekit

我对调查结果的类型有疑问。 如果我使用 CareKit/HealthKit 调查,一切都很好,当我想将它与 ResearchKit 调查混合时 - 我在以下方法中有错误:

func buildCarePlanResultFrom(taskResult: ORKTaskResult) -> OCKCarePlanEventResult {
    guard let firstResult = taskResult.firstResult as? ORKStepResult,
        let stepResult = firstResult.results?.first else {
            fatalError("Unexepected task results")
    }
    if let numericResult = stepResult as? ORKNumericQuestionResult,
        let answer = numericResult.numericAnswer {
        return OCKCarePlanEventResult(valueString: answer.stringValue, unitString: numericResult.unit, userInfo: nil)
    } else {

    }

    fatalError("Unexpected task result type")
}

这是 - 我认为 - 因为我无法创建 OCKCarePlanEventResult 对象 [answer 和 numericResult 均为 nil]。

我在下面的扩展中更新了症状跟踪器:

extension TabBarViewController: ORKTaskViewControllerDelegate {
func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith
    reason: ORKTaskViewControllerFinishReason, error: Error?) {
    defer {
        dismiss(animated: true, completion: nil)
    }
    guard reason == .completed else { return }
    guard let symptomTrackerViewController = symptomTrackerViewController,
        let event = symptomTrackerViewController.lastSelectedAssessmentEvent else { return }
    symptomTrackerViewController.progressRingTintColor = .lightGreen
    symptomTrackerViewController.delegate = self
    let carePlanResult = carePlanStoreManager.buildCarePlanResultFrom(taskResult: taskViewController.result)
    carePlanStoreManager.store.update(event, with: carePlanResult, state: .completed) {
        success, _, error in
        if !success {
            print(error?.localizedDescription)
        }
    }
}}

关于如何将结果类型从 ResearchKit 转换为 CareKit 或其他解决方案以更新 View 的任何建议?

可能,这会有所帮助,任务示例:

    let sleepHoursSurveyActivity = OCKCarePlanActivity.assessment(
        withIdentifier: ActivityIdentifier.sleepHours.rawValue,
        groupIdentifier: nil,
        title: "Sleep Hours",
        text: nil,
        tintColor: .darkGreen,
        resultResettable: true,
        schedule: dailyScheduleRepeating(occurencesPerDay: 1),
        userInfo: ["ORKTask" : AssessmentTaskFactory.sleepHoursSurveyAssessmentTask()])

static func sleepHoursSurveyAssessmentTask() -> ORKTask {
    var steps = [ORKQuestionStep]()
    let question = NSLocalizedString("How many hours did you sleep?", comment: "")
    let textChoices = [
        ORKTextChoice(text: "1-3", value: "1-3" as NSString),
        ORKTextChoice(text: "4-5", value: "4-5" as NSString),
        ORKTextChoice(text: "6-7", value: "6-7" as NSString),
        ORKTextChoice(text: "8", value: "8" as NSString),
        ORKTextChoice(text: "more than 8", value: "more than 8" as NSString)
        ]

    let questAnswerFormat: ORKTextChoiceAnswerFormat = ORKAnswerFormat.choiceAnswerFormat(with: .singleChoice, textChoices: textChoices)
    let sleepHoursSurvaySteps = ORKQuestionStep(identifier: "sleepHours", title: question, answer: questAnswerFormat)
    sleepHoursSurvaySteps.isOptional = false
    steps += [sleepHoursSurvaySteps]

    return ORKOrderedTask(identifier: "sleepHoursSurveyTask", steps: [sleepHoursSurvaySteps])
}

最佳答案

返回任务的函数 sleepHoursSurveyAssessmentTask 没有数字答案格式。您正在使用 ORKTextChoiceAnswerFormat,您可以使用 ORKChoiceQuestionResultORKTaskResult 中提取它。

关于ios - CareKit 和 ResearchKit 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775109/

相关文章:

ios - UITableViewController - 比屏幕宽的 TableView

iphone - iPhone SDK-<3.2中的CATextLayer崩溃

iphone - 错误 "_OBJC_CLASS_$_ISTAlertView",从 :"引用

ios - 使用 SpriteKit 场景编辑器设计复杂的对象

ios - 需要同时发出两个 HTTP 网络请求(完成处理程序一旦完成)

ios - 在带有 Ludei/Cocoon JS 的 IOS 设备上使用 WebGL 不接触 ThreeJS OrbitControls

ios - 从 Phonegap 应用程序在 iOS 上打开 native map 应用程序

iphone - 无法使用模型 segue 在 View 上设置标签

ios - 获取更新功能速度

ios - NSMutableURLRequest,JSON 转换为 NSDictionary