1

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

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

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

谢谢你 StackExchange 你的帮助将不胜感激!

4

2 回答 2

5

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

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

有关不同结果类型的文档,请参阅该ORKResult.h文件。


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


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

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

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

于 2016-03-07T11:12:34.037 回答
0

首先定义一个保存粗略结果的常量。您在任务视图控制器委托方法中执行此操作 ->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

于 2019-04-18T13:45:46.677 回答