gpt4 book ai didi

ios - HKSampleQuery 不能重复使用

转载 作者:行者123 更新时间:2023-11-29 10:25:07 30 4
gpt4 key购买 nike

  1. 为重量创建一个 HKSampleQuery(但不执行它)
  2. 创建并执行一个关于重量的 HKObserverQuery
  3. 在观察者查询的updateHandler中,执行权重样本查询

第一次执行示例查询时工作正常。

下次执行示例查询时,我得到一个异常:“...'NSInvalidArgumentException',原因:'您无法启动已经处于事件状态的查询'”

如果每次在观察者更新处理程序中创建一个新的示例查询,然后执行,它工作正常。

看来我应该能够重新使用示例查询的第一个实例;没有任何相反的记录。

class HealthDemoC {
let store = HKHealthStore()
let wtType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!
var wtObserverQ: HKObserverQuery! = nil
var wtSampleQ: HKSampleQuery! = nil

init() {
print("init: HealthDemoC")

// !! only instantiating the query here and then executing repeatedly in observerUpdateHandler fails
wtSampleQ = HKSampleQuery(sampleType: wtType, predicate: nil, limit: 0, sortDescriptors: nil, resultsHandler: wtResultsHandler)

wtObserverQ = HKObserverQuery(sampleType: wtType as HKSampleType, predicate: nil, updateHandler: observerUpdateHandler)
store.executeQuery(wtObserverQ)
}

func observerUpdateHandler (query: HKObserverQuery,
completion: HKObserverQueryCompletionHandler,
error: NSError?) {
print("clbk: observerUpdateHandler")

// instantianting a new query with each call to observerUpdateHandler works
// wtSampleQ = HKSampleQuery(sampleType: wtType, predicate: nil, limit: 0, sortDescriptors: nil, resultsHandler: wtResultsHandler)

store.executeQuery(wtSampleQ)
completion()
}

func wtResultsHandler(query: HKSampleQuery, results: [HKSample]?, error: NSError?) {
print("clbk: wtResultsHandler - \(results!.count)) results")

// stopping the query doesn't prevent the exception
// store.stopQuery(query)
}
}

最佳答案

虽然它不在官方文档中,但异常本身是一种文档形式,明确告诉您预期的行为是什么。当您需要再次运行它时,您应该在观察者查询的完成中使用相同的参数重新实例化查询。

关于ios - HKSampleQuery 不能重复使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801447/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com