Ali*_*aly 3 ios swift healthkit
我正在做一些关于如何向 Apple HealthKit 应用程序发送数据和从 Apple HealthKit 应用程序接收数据的教程。
我正在做的教程的一部分是如何从 healthKitStore 获取高度。
我想做同样的事情,但要检索葡萄糖数据而不是高度,我完成了所有步骤,但卡在了这段代码中:
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);
}
Run Code Online (Sandbox Code Playgroud)
如图所示,meters var 被分配了一个来自meterUnit 的double 值,然后创建了一个常量格式化程序来格式化meters var 并将其分配给预先声明的var (heightLocalizedString)
我的问题是,当我使用这种方法进行葡萄糖读数时,我面临几个问题,第一个问题是我无法弄清楚可用的葡萄糖单位是什么,我唯一得到的是
HKUnitMolarMassBloodGlucose
Run Code Online (Sandbox Code Playgroud)
当我使用它时,出现错误提示“'NSNumber' 不是 'HKUnit' 的子类型”,从错误中可以清楚地看出该参数不是HKUnit该类的子类型。
另一个问题是,如前面的代码所示, height 有一个格式化程序(NSLengthFormatter()),但我看不到 Glucose 的格式化程序。
实际上,我不确定是否必须完全按照教程来获取葡萄糖数据,但我也没有看到其他方法可以这样做。
请问有什么想法吗?
这是我用来检索葡萄糖数据的代码:
func updateGluco(){
let sampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodGlucose)
self.healthManager?.readMostRecentSample(sampleType, completion: {(mostRecentGluco, error) -> Void in
if (error != nil){
println("Error reading blood glucose from HealthKit store: \(error.localizedDescription)")
return;
}
var glucoLocalizedString = self.kUnknownString;
self.gluco = mostRecentGluco as? HKQuantitySample
println("\(self.gluco?.quantity.doubleValueForUnit(HKUnit.moleUnitWithMolarMass(HKUnitMolarMassBloodGlucose)))")
self.gluco?.quantity.doubleValueForUnit(HKUnit.moleUnitWithMolarMass(HKUnitMolarMassBloodGlucose))
if let mmol = self.gluco?.quantity.doubleValueForUnit(HKUnit.moleUnitWithMolarMass(HKUnitMolarMassBloodGlucose)) {
glucoLocalizedString = "\(mmol)"
} else {
println("error reading gluco data!")
}
dispatch_async(dispatch_get_main_queue(), {() -> Void in
self.glucoLabel.text = glucoLocalizedString})
})
}
Run Code Online (Sandbox Code Playgroud)
“mmol”变量返回一个 nil 值。
我不知道这是否与我的问题有关,但我刚刚阅读了一篇文章,说苹果在 iOS 8.2 中带回了血糖跟踪,我的应用程序部署目标是 8.1。(尽管 XCode 已更新到最新版本,但我无法将部署目标升级到最新的 iOS!)
查看标题,血糖需要单位类型(质量/体积),这意味着您需要指定一个复合单位,其中质量单位除以体积单位:
HK_EXTERN NSString * const HKQuantityTypeIdentifierBloodGlucose NS_AVAILABLE_IOS(8_0); // Mass/Volume, Discrete
Run Code Online (Sandbox Code Playgroud)
通常,人们测量血糖的单位是 mg/dL 和 mmol/L。您可以使用以下方法构建这些:
HKUnit *mgPerdL = [HKUnit unitFromString:@"mg/dL"];
HKUnit *mmolPerL = [[HKUnit moleUnitWithMetricPrefix:HKMetricPrefixMilli molarMass:HKUnitMolarMassBloodGlucose] unitDividedByUnit:[HKUnit literUnit]];
Run Code Online (Sandbox Code Playgroud)
注意 doubleValueForUnit: 需要一个 HKUnit,而不是一个 NSNumber。查看更多信息
| 归档时间: |
|
| 查看次数: |
2460 次 |
| 最近记录: |