【问题标题】:Collect/access ResearchKit results and save to file收集/访问 ResearchKit 结果并保存到文件
【发布时间】:2016-06-18 18:07:28
【问题描述】:

概述: 我正在开发我的第一个应用程序。它收集用户位置信息以跟踪自行车骑行。我将内容保存到一个 .txt 文件(坐标信息和属性信息),然后用户可以将他们的数据导出到 iOS 应用程序中以进行进一步分析。我已经成功添加了一个保存文本文件功能来存储上述信息以及将该文件导出到应用程序之外的功能。

问题: 我已经建立了一个 ResearchKit 调查来收集可以与用户骑自行车相关的附加属性信息。示例问题包括,用户为何骑行/出行目的天气如何等)。我想将 ResearchKit 调查的结果附加到具有坐标信息的文本文件中,或者在必要时创建一个单独的文本文件。我知道我需要以某种方式访问​​ ORKStepResult 任务,但我不熟悉该过程。

研究: 我已经在 Github 上搜索了使用 researchKit 的示例应用程序,但是对于用 Swift 编写的应用程序,结果非常有限。我不是一个足够自在的“开发人员”,无法阅读 Objective-C,然后将其翻译成 Swift……总有一天!我也看过 Rey Wenderlich 的教程,但他们没有提到如何访问、保存和导出你的调查结果。我查看了 StackExchange 上的其他问题,但大多数都提供了与 Objective-C 相关的详细答案。

感谢 StackExchange 的帮助,我们将不胜感激!

【问题讨论】:

    标签: ios swift export researchkit


    【解决方案1】:

    基本上,您可以通过在ORKTaskViewController 委托中实现func taskViewController(taskViewController: ORKTaskViewController, didFinishWithReason reason: ORKTaskViewControllerFinishReason, error: NSError?) 方法并从那里访问taskViewController.result 来访问结果树(以ORKTaskResult 对象为根)。

    然后,递归地遍历ORKTaskResultresults 属性,直到到达叶子节点,您就可以以您选择的格式访问和存储所需的信息。

    请参阅ORKResult.h 文件以获取不同结果类型的文档。


    如果您只是将根 ORKTaskResult 打印到控制台(或文本文件),它将递归地显示所有结果树,尽管我认为这不是完全合适的格式,因为这些显示对象名称和你不需要的内存地址。


    最后,您可能想看看官方存储库中的ORKCatalog 示例项目。当您运行该应用程序时,它有一个 Results 选项卡,其中显示了上次运行的调查或活动的结果。

    读取和显示结果的代码位于ORKCatalog 项目的Displaying Results 组中。 This 是前面提到的任务完成 委托方法,它依次在结果视图控制器中设置结果,如here 所示,最终由ResultTableViewProviders.swift 文件中的代码处理.

    但是,这里的结果处理代码有点复杂(因为它考虑了所有不同的结果类型),如果您只想处理特定类型的结果,您的解决方案可能会简单得多。

    【讨论】:

      【解决方案2】:

      首先定义一个保存粗略结果的常量。您在任务视图控制器委托方法中执行此操作 -> taskViewController:didFinishWithReason:error:

      然后有两个基本步骤可以从粗略的结果中获得最终以您需要的格式获得结果。

      第 1 步 ->

      let roughResult = taskViewController.result.stepResult(forStepIdentifier: "stepIdentifier")?.results?.first as! ORKResult

      注意:转换为 ORKResult 是冗长的:结果已经是 ORKResult 类型。不过还是这样做吧:这将使您的对象 + 程序更易于阅读。

      第 2 步 ->

      let cutResult = roughResult as! ORKDateResult

      注意:将您的 roughResult 转换为 ORKDateResult 是获得您想要的结果类型的结果的关键。通过将其转换为您需要的结果类型,您可以通过调用步骤 2 中的常量来访问正确的属性。

      第 3 步 let date = cutResult.dateAnswer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 2016-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多