ios - swift 中的 Apple CareKit 症状代码不会将数据保存到 CareStore

标签 ios swift researchkit carekit

以下代码部分运行。它显示问题步骤和形式。用户能够输入数据,但是当用户单击时,什么都不保存到护理存储中,并且显示不会更新。有什么想法吗?

class SymptomsVC1: UIViewController{


fileprivate let carePlanStoreManager = CarePlanStoreManager1.sharedCarePlanStoreManager
fileprivate let carePlanData: CarePlanData
fileprivate var symptomTrackerViewController: OCKSymptomTrackerViewController? = nil



required init?(coder aDecoder: NSCoder) {
    carePlanData = CarePlanData(carePlanStore: carePlanStoreManager.store)

    super.init(coder: aDecoder)

}



override func viewDidLoad() {
    super.viewDidLoad()
    setViewControllerTitle(self, title: "Symptoms Card")
    //creatMenuObject(self)


    let symptomTracker = OCKSymptomTrackerViewController.init(carePlanStore: carePlanStoreManager.store)
    symptomTracker.progressRingTintColor = UIColor.magenta
    symptomTracker.delegate = self
    symptomTracker.showEdgeIndicators = true
    // Setup the controller's title
    symptomTracker.title = NSLocalizedString("Symptoms Card", comment: "")

    //change left navigation "Back" button to menu button
    var backImage:UIImage = UIImage(named: "menu")!
    backImage = backImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
    let fakeBackButton = UIBarButtonItem(image: backImage, style: UIBarButtonItemStyle.bordered, target: symptomTracker.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)))
    symptomTracker.navigationItem.leftBarButtonItem = fakeBackButton;

    self.navigationController?.pushViewController(symptomTracker, animated: true)


}



override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


extension SymptomsVC1: OCKSymptomTrackerViewControllerDelegate {

  func symptomTrackerViewController(_ viewController:    OCKSymptomTrackerViewController, didSelectRowWithAssessmentEvent assessmentEvent: OCKCarePlanEvent) {

if viewController.progressRingTintColor == UIColor.magenta {

    guard let userInfo = assessmentEvent.activity.userInfo,
        let task: ORKTask = userInfo["ORKTask"] as? ORKTask else { return }

    let taskViewController = ORKTaskViewController(task: task, taskRun: nil)
    taskViewController.delegate = self

    present(taskViewController, animated: true, completion: nil)


     }
  }
}

extension SymptomsVC1: ORKTaskViewControllerDelegate {

func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith
reason: ORKTaskViewControllerFinishReason, error: Error?) {

defer {
    dismiss(animated: true, completion: nil)
}
print("task view controller clicked")
guard reason == .completed else { return }
guard let symptomTrackerViewController = symptomTrackerViewController,
      let event = symptomTrackerViewController.lastSelectedAssessmentEvent else { return }

let carePlanResult = carePlanStoreManager.buildCarePlanResultFrom(taskResult: taskViewController.result)
print("care plan result")
print(carePlanResult)
carePlanStoreManager.store.update(event, with: carePlanResult, state: .completed) {
    success, _, error in
    if !success {
        print(error?.localizedDescription)
    }
  }
 }
}

最佳答案

我通过在以下函数中添加一行代码找到了修复:

override func viewDidLoad() {
super.viewDidLoad()
setViewControllerTitle(self, title: "Symptoms Card")
//creatMenuObject(self)


let symptomTracker = OCKSymptomTrackerViewController.init(carePlanStore: carePlanStoreManager.store)
symptomTracker.progressRingTintColor = UIColor.magenta
symptomTracker.delegate = self
symptomTracker.showEdgeIndicators = true
// Setup the controller's title
symptomTracker.title = NSLocalizedString("Symptoms Card", comment: "")

//*** add the following line, now the result show up in carestore ***
symptomTrackerViewController = symptomTracker 


//change left navigation "Back" button to menu button
var backImage:UIImage = UIImage(named: "menu")!
backImage = backImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
let fakeBackButton = UIBarButtonItem(image: backImage, style: UIBarButtonItemStyle.bordered, target: symptomTracker.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:)))
symptomTracker.navigationItem.leftBarButtonItem = fakeBackButton;

self.navigationController?.pushViewController(symptomTracker, animated: true)

}

关于ios - swift 中的 Apple CareKit 症状代码不会将数据保存到 CareStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432024/

相关文章:

ios - 选项卡栏 Controller 灰色

swift - 本地通知在计划外时间多次触发

ios - 重播套件未记录父应用程序中的第二个应用程序

xcode - 尝试从终端运行 Swift 时出错

objective-c - DecimalNumberByAdding 如何工作?

ios - 苹果应用程序评论 : Demo Account for Instagram?

ios - 如何在我的应用程序中使用 ORKESerializer?

swift - 在任务之间创建 Segues 研究工具包

IOS/objective-C : Detect What is Different About Arrays

swift - 在 Swift 中返回新的 ViewController