无法在WatchOS 2上读取HealthKit样本,但它适用于iOS

时间:2015-10-02 11:15:01

标签: ios iphone swift watch-os-2 health-kit

我已经编写了一个基本的iPhone应用程序,可以成功读取HealthKit的重量,但我相应的WatchOS应用程序只返回空结果。我在两个平台上使用相同的HealthKit代码。我知道授权适用于Watch,因为授权请求返回isEnabled = success。

模拟器和硬件设备上的行为相同,并且Phone返回正确的权重,但是watch会返回带有0个样本(results?.count=0)的结果集。为同一项目中的监视和电话目标启用了HealthKit功能。我使用的是WatchOS 2和Xcode 7.0.1。

你能帮我理解为什么手表没有结果吗?

iPhone的ViewController代码

@IBAction func btnReadWeight(sender: AnyObject) {
    HealthKit().recentWeight() { weight, error in
        dispatch_async( dispatch_get_main_queue(), { () -> Void in
            self.txtWeight.text=String(format:"%.1f",weight)
        })
    }
}

Watch上的InterfaceController代码

@IBAction func btnReadWeight() {
    HealthKit().recentWeight() { weight, error in
        dispatch_async( dispatch_get_main_queue(), { () -> Void in
            self.myLabel.setText(String(format:"%.1f",weight))
        })
    }
}

Healthkit代码(在iPhone和Watch上相同)

func recentWeight(completion: (Double, NSError?) -> () )
{
    let type = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)
    let today = NSDate()
    let querystart = NSCalendar.currentCalendar().dateByAddingUnit(
        .Day,
        value: -365,  // since a year ago
        toDate: today,
        options: NSCalendarOptions(rawValue:0))

    let predicate = HKQuery.predicateForSamplesWithStartDate(querystart , endDate: NSDate(), options: .None)

    let query = HKSampleQuery(sampleType: type!, predicate: predicate, limit: 0, sortDescriptors: nil) { query, results, error in
        var recentweight: Double = 0
        print(results?.count )
        if results?.count > 0
        {
            for result in results as! [HKQuantitySample]
            {
                recentweight = result.quantity.doubleValueForUnit(HKUnit.gramUnit())/1000.0
            }
        }
        completion(recentweight, error)
    }
    healthKitStore.executeQuery(query)
}

1 个答案:

答案 0 :(得分:1)

有两种行为可以解释您所看到的内容:

(1)手表上保存的所有样本都会同步到手机进行永久记录。但是保存在手机上的样本却不是这样。手表的存储容量有限,并且速度不如手机快,因此在手表上存储所有样品的完整数据库是不可行的。如果重量样本来自手机,那么它将不会出现在手表上。

(2)要限制手表上HealthKit数据库的总体大小,手表上保存的样本将在大约一周后过期,并且将无法再访问。请参阅the HKHealthStore documentation