【发布时间】:2015-05-13 11:16:36
【问题描述】:
我正在做一些关于如何向 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);
}
如图所示,从meterUnit中为meters var分配一个double值,然后创建一个常量格式化程序来格式化meters var并将其分配给预先声明的var(heightLocalizedString)
我的问题是,当我使用这种方法读取葡萄糖时,我遇到了几个问题,第一个问题是我无法弄清楚可用的葡萄糖单位,我得到的唯一一个是
HKUnitMolarMassBloodGlucose
当我使用它时会出现错误提示 "'NSNumber' is not a subtype of 'HKUnit'",从错误中可以清楚地看出此参数不是HKUnit 类的子类型.
另一个问题是,如前面的代码所示,有一个高度 (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})
})
}
“mmol”变量返回零值。
我不知道这是否与我的问题有关,但我刚刚看到一篇文章说苹果在 iOS 8.2 中恢复了血糖跟踪,我的应用程序部署目标是 8.1。 (尽管 XCode 已更新到最新版本,但我无法将部署目标升级到最新的 iOS!)
【问题讨论】:
-
let molesOfBloodGlucose = HKUnit.moleUnitWithMolarMass(HKUnitMolarMassBloodGlucose)?文档:developer.apple.com/library/prerelease/ios/documentation/…: 。此外,这个问题与 Xcode 无关 - 请删除该标签。 -
这个常数与葡萄糖量样本无关,我使用了这个代码:“self.gluco?.quantity.doubleValueForUnit(HKUnit.moleUnitWithMolarMass(HKUnitMolarMassBloodGlucose))”但我得到的是零价值@RoboticCat
-
请编辑您的问题以包含您正在使用的实际代码而不是示例代码,并使用您获得
nil值的信息对其进行更新。此外,调试器告诉您有关nil值的什么信息 - 您的代码的哪一部分导致了它? -
我已经添加了用于获取葡萄糖数据的实际代码,请您看一下,还请注意问题末尾的最后一条注释,谢谢@机器人猫