我正在处理从HealthKit
应用程序中读取不同健康数据的应用程序。
到目前为止,我设法得到DOB,最近的身高,体重和血糖记录。
我仍然需要的是如何获取这些对象的元数据,特别是我需要获取记录输入的日期/时间。
例如,要获得高度记录,请使用此方法:
func updateHeight()
{
// 1. Construct an HKSampleType for Height
let sampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeight)
// 2. Call the method to read the most recent Height sample
self.healthManager?.readMostRecentSample(sampleType, completion: { (mostRecentHeight, error) -> Void in
if( error != nil )
{
println("Error reading height from HealthKit Store: \(error.localizedDescription)")
return;
}
var heightLocalizedString = self.kUnknownString;
self.height = mostRecentHeight as? HKQuantitySample;
// 3. Format the height to display it on the screen
if let meters = self.height?.quantity.doubleValueForUnit(HKUnit.meterUnit()) {
let heightFormatter = NSLengthFormatter()
heightFormatter.forPersonHeightUse = true;
heightLocalizedString = heightFormatter.stringFromMeters(meters);
}
// 4. Update UI. HealthKit use an internal queue. We make sure that we interact with the UI in the main thread
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.heightLabel.text = heightLocalizedString
});
})
}
您注意到我创建了一个HKSampleType
常量,然后将其传递给一个名为readMostRecentSample
的方法,该方法接受此参数,然后返回此样本类型的最新记录。
我尝试打印返回对象的行,并且我得到了这个输出:
1.9 m"健康"元数据:{HKWasUserEntered = 1; 2015-05-17 10:11:00 +0300 2015-05-17 10:11:00 +0300
如您所见,输出包含对象的元数据,但实际上我无法仅提取日期。
此外,我发现有一个名为metadata
的对象的属性,我将其打印出来,但它只检索了数据是由用户输入(手动)还是自动从第三方输入的布尔值:
println(self.height?.metadata)
输出结果为:
[HKWasUserEntered = 1]
如果有人能告诉我如何提取每个对象的元数据,我将不胜感激。
答案 0 :(得分:2)
HKSample
对象及其子类HKQuantitySample
有2个字段,用于存储日期信息:startDate
和enDate
。如果您想要获取日期,那么您应该查看它。
一些样本 - 例如,体温 - 表示单个点 时间。对于这些样本,开始日期和结束日期都相同, 因为它们都是指样本的时间点 服用。
其他样本 - 例如,步数 - 代表一段时间内的数据 间隔。这里,样本应使用不同的开始和结束日期。 这些日期标志着样本时间间隔的开始和结束, 分别