第一次执行样例查询时工作得很好。
下一次执行样例查询时,我会得到一个异常:“.‘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)
}
}发布于 2015-09-27 23:47:37
虽然它不在正式文档中,但例外情况本身就是一种文档形式,它明确地告诉您所要的行为是什么。当您需要再次运行该查询时,您应该用相同的参数重新实例化该查询。
https://stackoverflow.com/questions/32801447
复制相似问题