如何使UI反映HealthKit

时间:2016-05-05 02:26:47

标签: ios swift uikit health-kit

我正在为未来的项目试验HealthKit,目前正在实施单一卡路里计数器。一个简单的文本字段,用于输入卡路里量和进度指示器,显示卡路里/每日分配。没有数据模型(NSUserDefaults中除了calorieGoal),因为它完全建立在HealthKit之上。

进度指示器应该在每天启动和重置之间保持不变,但我很难以有效的方式执行此操作。我提出的两个解决方案是:

  1. 每次加载视图时从HealthKit中获取膳食卡路里。对于一项简单的任务来说,这似乎代价高昂,但我倾向于它。
  2. 创建另一个NSUserDefualts条目以跟踪卡路里的数量和最后一个条目的生成日期,然后在每次加载视图/启动应用程序时检查日期。
  3. 我觉得应该有一个更好的解决方案,但我无法想出一个。

1 个答案:

答案 0 :(得分:1)

在内存中有一个数据模型。 您的模型包含保存数据的变量。

您的模型还负责处理数据的代码。这包括与HealthKit交互的代码。

您的模型对您的UI一无所知。它不会导入任何与UI相关的模块。它可能可以在iPhone和手表上运行。

由于您以异步方式获取数据,因此模型会在收到新数据时发送通知。

当有新数据时,您的UI代码会侦听通知。当您的UI收到此类通知时,它会重新显示主队列中的模型数据。

此方法适用于您的简单案例,适用于非常复杂的应用程序。

启动案例的用法示例:

  • 启动你的应用
  • 告诉你的模型它应该从hk异步获取数据。
  • 您的模型还处理授权(使您的UI代码更简单)。
  • 当模型最终异步接收来自HealthKit的数据时,它会发送通知。
  • 当您的用户界面收到通知时,它会重新显示模型中的数据。

当您的应用运行时更改hk数据(由其他应用更改或手表测量)时,此aporoach也会处理此案例。