概述: 我正在开发我的第一个应用程序它收集用于跟踪自行车骑行的用户位置信息。我将内容保存为.txt文件(坐标信息和属性信息)然后,用户可以将其数据导出iOS应用程序以进行进一步分析。我已成功添加了一个保存文本文件函数来存储上述信息以及将该文件导出到应用程序之外的功能。
问题: 我已经设置了一个ResearchKit调查来收集可以与用户骑车相关的其他属性信息。示例问题包括用户为什么骑行/旅行目的和什么是天气等)。我想将ResearchKit调查的结果附加到具有坐标信息的文本文件中,或者在必要时创建单独的文本文件。我知道我需要以某种方式访问ORKStepResult任务,但我不熟悉这个过程。
研究: 我使用researchKit搜索了Github的示例应用程序,但是使用Swift编写的应用程序的结果非常有限。我不够舒服"开发人员"能够阅读Objective-C,然后将其翻译成Swift ......有一天!我还查看了Rey Wenderlich的教程,但他们没有提及如何访问,保存和导出调查结果。我在StackExchange上查看过其他问题,但大多数问题都与Objective-C有关。
谢谢StackExchange您的帮助将不胜感激!
答案 0 :(得分:5)
基本上,您可以通过在ORKTaskResult
委托中实施func taskViewController(taskViewController: ORKTaskViewController, didFinishWithReason reason: ORKTaskViewControllerFinishReason, error: NSError?)
方法并从中访问ORKTaskViewController
来访问结果树(其中taskViewController.result
对象为根)那里。
然后,递归遍历ORKTaskResult
的{{1}}属性,直到您到达树叶,然后您可以选择的格式访问和存储所需的信息。
有关不同结果类型的文档,请参阅results
文件。
如果您只是将根ORKResult.h
打印到控制台(或文本文件),它将以递归方式显示所有结果树,但我认为这不是一个完全合适的格式,因为这些显示对象您不需要的姓名和记忆地址。
最后,您可能希望查看官方存储库中的ORKTaskResult
示例项目。运行应用程序时,它有一个结果选项卡,显示最后运行的调查或活动的结果。
读取和显示结果的代码位于ORKCatalog
项目的Displaying Results
组中。 This是前面提到的任务完成委托方法,它依次将结果设置在结果视图控制器中,如here所示,并最终由代码中的代码处理ResultTableViewProviders.swift
档案。
但是,这里的结果处理代码有点涉及(因为它考虑了所有不同的结果类型),如果你只想处理特定类型的结果,你的解决方案可能会简单得多。
答案 1 :(得分:0)
首先定义一个保存粗略结果的常量。您可以在任务视图控制器委托方法-> taskViewController:didFinishWithReason:error:
然后有两个基本步骤,可以从粗略结果中最终获得所需格式的结果。
步骤1->
let roughResult = taskViewController.result.stepResult(forStepIdentifier: "stepIdentifier")?.results?.first as! ORKResult
注意:强制转换为ORKResult是冗长的:结果已经是ORKResult类型。不过还是要这样做:这将使您的对象+程序更易于阅读。
第2步->
let cutResult = roughResult as! ORKDateResult
注意:将您的rawResult转换为ORKDateResult是在所需的结果类型中获取结果的关键。通过将其强制转换为所需的结果类型,可以通过从步骤2调用常量来访问正确的属性。
第3步
let date = cutResult.dateAnswer