大多数浏览器和
Developer App 均支持流媒体播放。
-
构建研究和护理 app,第 2 部分:计划任务
敬请了解如何让 ResearchKit 和 CareKit 共同协作,消除纸质问卷的单调乏味。继续与我们一起编程,并探索如何让您比以往更轻松地安排针对研究参与者的调查。您还将学习 CareKit 中不断发展的护理团队的先进技术,并了解 ResearchKit 的活动任务如何帮助记录临床的重要测量值。这是由三个部分构成的“编程临摹课程”系列的第二节内容。为了能充分了解本节内容,我们建议首先观看“构建研究和护理 app,第 1 部分”。有关这些框架的更多背景信息,请观看 WWDC19 的“ResearchKit 和 CareKit 的重新构思”。
资源
相关视频
WWDC21
-
下载
♪低音音乐播放♪ ♪ 埃里克霍恩伯格:欢迎回到 研究和护理app的代码随行 这是我们三部分系列的第二部分 你和我将为我们的朋友杰米 构建一个物理治疗app 如果你想继续学习 你可以在课程资源中找到我们的项目 我会继续并在这里登入 如果你参加了我们的第一次课程 你会记得我们刚刚完成了 登入和同意流程 在本次课程中…等一下 看来我们收到了杰米的信息 “我对app有些新的想法” “你有看到我上一条短信吗?” 从其他app传来要求 杰米已邀请你在备忘录文件上 进行协作 好吧 让我们看看 这次我们要做什么 显示窗体、保留一些数据 动态时间表、运动范围 好的 看起来杰米希望我们 建立一个每日签到调查 询问参与者他们的睡眠时间 和疼痛指数 我们将向你展示如何使用 ResearchKit的表项 将多个问题放在一个页面上 然后 我们需要解析 ResearchKit调查的结果 并将它们保存到CareKit中 这将导致我们填满完成环 和更新任务卡UI 我们还会详细介绍如何使用 CareKit创建更高级的时间表 然后我们将使用其中一个时间表 与ResearchKit一起 提示参与者 测量膝盖的运动范围 我们有很多东西要介绍 所以我们开始吧! 我们将从每日签到调查开始 就像我们为我们的登入任务 所做的一样 我们将从定义时间表 和CareKit任务开始 这应该是每日签到 所以我们就安排在每天早上 比方说 早上8点吧 我们将使用唯一标识符 和我们刚刚定义的时间表 创建签到任务 当然 我们需要将它保留在 我们的存储中 这和我们在登入流程中 所做的完全一样 希望你开始感到熟悉了 就像登入任务一样 我们的下一步将是跳转到 CareFeedViewController 并告诉CareKit如何显示此任务 这一次 让我们的解决方案更通用一些 我们将获取当前日期的所有任务 然后对于每个任务 我们将创建一个视图控制器 并将该视图控制器 附加到我们的列表中 当我们增加更多任务 这个扩展应该会更好一些 我们实际上还没有定义这个 fetchTasks方法 或这个viewController方法 我们需要在文件中往下拉一点 并写出它们 所以这是我们的fetchTasks方法 我们首先为特定日期 创建一个任务查询 并指定要排除 没有任何预定事件的任务 当我们的任务不是每天都发生时 这就会发挥作用 比方说 例如 你收到了 每周一服药的处方 周二和周三 那个处方仍然分配给你 只是没有药可以服 此属性确保不从查询 返回此类任务 查询返回后 我们会把获取的任务 传递给完成处理程序 我们还需要填写一个接受任务 并返回视图控制器的方法 我们将检查任务的id 如果它是签到任务 我们将使用我们在第一部分中 介绍过的 新的SurveyTaskViewController 和前面一样 我们将提供一个任务 一个eventQuery 和一个对storeManager的引用 我们还需要传入ResearchKit调查 和用于将ResearchKit结果转换为 CareKit结果值数组的函数 稍后我们将编写这两个方法 但首先让我们看看app ResearchKit和CareKit 是如何一起工作的 我们的app将创建 一个ResearchKit调查 ResearchKit会接管 并指导参与者完成调查流程 它将产生一个ORKTaskResult 然后返回给我们的app 然后我们的app会将 ResearchKit结果转换为 CareKit结果值 以保存在CareKit的存储中 保存一个新的结果 会导致我们的完成环被填满 任务卡的UI会更新 好 让我们来解决这两种方法 我们将在Surveys.swift中定义它们 我准备了几个标识符 将在下面使用 我们需要一种创建 ResearchKit调查的方法 以及一种将结果转换为 CareKit结果值的方法 我们想知道 参与者的睡眠时间 和他们经历的疼痛程度 之间是否有关连 因此我们将创建一个 包含两个问题的表格 formStep需要唯一标识符 一个标题和一些文本 我们还将其标记为非选不可 因为我们不希望窗体被跳过 接下来让我们创建我们的两个项目 第一个问题是关于疼痛 我们将其设为非选不可的问题 这代表窗体本身不能被跳过 我们也不能在没有回答 这个特定问题的情况下提交窗体 可以看到我们还需要 提供一个答案格式 答案格式告诉ResearchKit 期望什么样的答案 以及如何提示使用者输入答案 他们是在输入重量 是在选择图像 还是在录制自己的声音? 在这种情况下 我们将选择使用 ORKScaleAnswerFormat 它会创建一个UISlider 滑标是iOS用户熟悉的界面 它们很直观 并且提供了 比在纸上填圈更好的体验 我们将指定最大疼痛分数为十 最小值为一 将步长设置为一 以便只允许整数 并提供最小值和最大值的描述 好的 让我们再往下拉一点 再创建一个项目:a sleepItem 这与painItem几乎完全相同 我们也将使用几乎相同的答案格式 唯一的区别是标识符 我们将睡眠时间的最小值改为0小时 将睡眠的最大值改为12小时 现在我们只需要将这两个项目 传递到窗体项目中 然后使用单个formStep创建 一个ORKOrderedTask 第二个函数会获取 一个ResearchKit任务结果 并创建一个要持久化的 CareKit值数组 但是在我们写这段代码之前 让我们先看一下 ResearchKit任务结果的结构 以便更好地了解如何解析它 了解ORKTaskResults 是嵌套类型很重要 我们希望从签到调查的根结果开始 然后深入到checkin.form checkin.form本身有子元素 我们需要深入挖掘每个子元素 首先 我们要找到 针对疼痛项目标识符 和睡眠项目标识符给出的答案 我们知道这些都是量表问题的结果 我们可以从中得到量表的答案 本例为4和11 这就是它在视觉上的样子 这就是同样的过程在代码中的样子 从根结果开始 我们找到第一个 用窗体标识符标记的子结果 该结果将有自己的子结果 我们可以用 ORKScaleQuestionResult 提取所有的子结果 我们知道有两个子结果 疼痛答案是第一个 标有疼痛标识符的答案 睡眠答案是第一个 标有睡眠标识符的答案 两者都有scaleAnswer属性 一旦我们掌握了答案 我们需要将它们 转换为CareKit结果值 一个用于睡眠 一个用于疼痛 这里的kind属性是可选的 你不需要设置它 但如果你以后想查找某个值 它会很有帮助 我们将在第三部分 看到为什么这很有用 我们需要做的最后一件事 是从这个函数返回两个值 所有这些就绪后 我们的每日签到就可以开始了! 让我们执行app 看看我们做得如何 请注意 我们已经在第一部分 完成了登入 因此我们不需要再次完成同意流程 这是我们app的真正内容 我们刚刚创建的CareKit签到任务 就在我们期望的位置 点击卡片 我们就进入了ResearchKit调查 我们会在这里给一些答案 我们假设疼痛程度是四 睡眠时间是八小时 当我们回到我们的Care Feed时 我们可以看到顶部的完成环被填满了 这代表来自ResearchKit的答案 已成功解析到CareKit 看起来真不错 因此 我们已经用多问题窗体 完成了签到调查 并且验证了数据 是否以我们希望的方式 保存在CareKit中 这代表我们已经完成了一半 是时候进入CareKit中的 进阶时间表了 我们稍后会把它应用到 我们的运动范围任务中 与之前的签到和登入任务一样 第一步是定义时间表 但是我们要做一些 更复杂的事 杰米要求我们随着时间的推移 减少要求参与者 测量他们的活动范围的频率 具体来说 我们想设置一个时间表 提示参与者在第一周每天测量 他们的活动度 但之后一周只测量一次 直到月底 之后就再也不用测量了 第一周每天一次 之后一周一次 让我们从定义几个关键日期开始 今天上午、下周和下个月 现在 如果你想在 CareKit中创建更细微的时间表 OCKScheduleElement 是该作业的工具 时间表元素有一个开始日期 一个结束日期 并在该期间的某个间隔重复 这里的每日元素从今天早上开始 到下周结束 每天重复 第二个元素是每周元素 下周开始 下个月结束 每周重复 现在我们有了两个元素 我们可以将它们组合在一起 以创建一个复合时间表 然后我们可以使用该时间表 创建一个新的运动范围任务 当然 我们也需要将它添加到 我们的存储中 就像我们的其他任务一样 下一步是跳回我们的CareFeed 并指定我们希望CareKit 如何显示此任务 同样的 我们将使用 SurveyTaskViewController 我们需要提供一个调查以及一些函数 来提取答案 让我们跳回到Surveys.swift 并在开始之前 先把它们排除 提供一些结构 好 所以运动范围任务其实很简单 事实上 它是作为预先设定的任务 被内置在ResearchKit中 我们只需要给它一个标识符 并指定要测量哪个膝盖 现在预定义的任务 内建了一个完成步骤 它显示的信息是一个合理的默认值 但我们真的希望显示一条自定义信息 适合我们的范例 所以我们要告诉ResearchKit 省略标准的完成步骤 然后 我们将定义我们自己的 并给它一个与物理治疗相关的 鼓励信息 这是第一个函数 第二个是我们会从ResearchKit结果 转换为CareKit结果值的地方 希望你现在开始觉得熟悉了 我们有很多方法可以做到这一点 但今天我们将深入研究 直到我们得到第一个运动范围结果 我们知道只有一个 运动范围结果实际上有很多 有用的属性 但对于我们的范例 我们最感兴趣的是范围 它测量参与者 能够弯曲膝盖的程度 我们可以将kind字段 与键路径一起使用 以便以后轻松查找此值 顺便说一下 这是第三部分的伏笔 好的 这就是 提取结果值的函数 好了 我想我们都准备好了 让我们执行我们的app 我来向你展示它是如何运作的 我们要检查的第一件事 是我们的时间表 是否按照我们的计划运作 运动范围任务应该在 第一周的每一天都出现 当我翻到第八、第九和第十页时 运动范围任务每天都会出现 但到了下周 就不再出现了 除了周一 这是一周中 我们仍然希望它出现的一天 在这里 它仍然每周只出现一次 但如果我们翻到更远的日期 一直到下个月 它就不会再出现了 CareKit时间表是对这样的方案 进行预编程的好方法 让我们回到今天来试看看
当我点击开始时 我们的指示步骤 可以帮助我了解要做什么 当我开始时 Siri会给我音频提示 所以我会按照她的指示去做 Siri:将设备放在左膝上 点击屏幕 并尽可能地 伸展左膝 触摸任意位置以继续 完成后 将左膝放回 起始位置 然后点击任意位置 埃里克:很好 很不错吧? 通常你必须去医生办公室 治疗师会帮助你进行这样的测量 但ResearchKit可以帮助参与者 在自己家中进行测量 我认为杰米会对我们 取得的进展印象深刻的 我会在这之后 立即与他进行FaceTime通话 并把我们在TestFlight上的 最新版本app传给他 当我向杰米介绍我们的进度时 你可以在researchandcare.org上 找到更多有关我们框架的信息 或在GitHub上阅读源代码 在课程一中 我们设置了登入流程 在本次课程中 我们安排了两个任务 再次加入我们的第三次 也是最后一次课程 看看ResearchKit和CareKit 如何帮助我们完成我们的app 再见! ♪
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。