HKAnchoredObjectQuery updateHandler 只调用一次
HKAnchoredObjectQuery updateHandler calls only once
我在 iPhone 应用程序中有 ViewController
:
class ViewController: UIViewController {
private let healthStore = HKHealthStore()
private let heartRateUnit = HKUnit(fromString: "count/min")
private var anchor = HKQueryAnchor(fromValue: Int(HKAnchoredObjectQueryNoAnchor))
override func viewDidLoad() {
super.viewDidLoad()
if let query = createHeartRateStreamingQuery(NSDate()) {
healthStore.executeQuery(query)
}
}
func createHeartRateStreamingQuery(workoutStartDate: NSDate) -> HKQuery? {
guard let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate) else { return .None }
let heartRateQuery = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: anchor, limit: Int(HKObjectQueryNoLimit)) { (query, sampleObjects, deletedObjects, newAnchor, error) in }
heartRateQuery.updateHandler = {(query, samples, deleteObjects, newAnchor, error) in
self.updateHeartRate(samples)
}
return heartRateQuery
}
但是 heartRateQuery.updateHandler
在我使用 Workout 应用程序时只调用了一次。
看起来是同样的错误 - https://forums.developer.apple.com/thread/14571 and
您需要为您的样本类型(心率)启用后台传输。查找方法
HKHealthStore.enableBackgroundDeliveryForType()
我在
之前执行这个方法
HKHealthStore.executeQuery().
更新:Swift 5
您可以指定一个 ObjectType
以及您希望它触发的频率。
HKHealthStore.enableBackgroundDelivery(for: HKObjectType, frequency: HKUpdateFrequency.immediate)
我在 iPhone 应用程序中有 ViewController
:
class ViewController: UIViewController {
private let healthStore = HKHealthStore()
private let heartRateUnit = HKUnit(fromString: "count/min")
private var anchor = HKQueryAnchor(fromValue: Int(HKAnchoredObjectQueryNoAnchor))
override func viewDidLoad() {
super.viewDidLoad()
if let query = createHeartRateStreamingQuery(NSDate()) {
healthStore.executeQuery(query)
}
}
func createHeartRateStreamingQuery(workoutStartDate: NSDate) -> HKQuery? {
guard let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate) else { return .None }
let heartRateQuery = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: anchor, limit: Int(HKObjectQueryNoLimit)) { (query, sampleObjects, deletedObjects, newAnchor, error) in }
heartRateQuery.updateHandler = {(query, samples, deleteObjects, newAnchor, error) in
self.updateHeartRate(samples)
}
return heartRateQuery
}
但是 heartRateQuery.updateHandler
在我使用 Workout 应用程序时只调用了一次。
看起来是同样的错误 - https://forums.developer.apple.com/thread/14571 and
您需要为您的样本类型(心率)启用后台传输。查找方法
HKHealthStore.enableBackgroundDeliveryForType()
我在
之前执行这个方法HKHealthStore.executeQuery().
更新:Swift 5
您可以指定一个 ObjectType
以及您希望它触发的频率。
HKHealthStore.enableBackgroundDelivery(for: HKObjectType, frequency: HKUpdateFrequency.immediate)