Я использую НОД в быстрой так:Выполнение функции после завершения все фонового процесса в быстрой
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
//all background task
dispatch_async(dispatch_get_main_queue()) {
self.second()
}
}
В этом коде второй функции вызывался до завершения все фоновой задачи, поэтому я не в состоянии возьмите некоторые данные, которые я использую во второй функции. Я хочу выполнить второй метод после выполнения всех фоновых задач. Может ли кто-нибудь сказать мне, как достичь этой задачи?
*************** В фоновом режиме я беру healthkit данные как ******
let healthKitTypesToRead =
Set(
arrayLiteral: HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!,
HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex)!,
HKObjectType.workoutType()
)
let newCompletion: ((Bool, NSError?) -> Void) = {
(success, error) -> Void in
if !success {
print("You didn't allow HealthKit to access these write data types.\nThe error was:\n \(error!.description).")
return
}
else
{
let stepCount = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
// Our search predicate which will fetch data from now until a day ago
// (Note, 1.day comes from an extension
// You'll want to change that to your own NSDate
//let date = NSDate()
//let predicate = HKQuery.predicateForSamplesWithStartDate(date, endDate: NSDate(), options: .None)
// The actual HealthKit Query which will fetch all of the steps and sub them up for us.
let stepCountQuery = HKSampleQuery(sampleType: stepCount!, predicate:.None, limit: 0, sortDescriptors: nil) { query, results, error in
var steps: Double = 0
if results?.count > 0
{
for result in results as! [HKQuantitySample]
{
steps += result.quantity.doubleValueForUnit(HKUnit.countUnit())
}
testClass.HK_stepCount = String(steps)
}
//completion(steps, error)
}
self.healthKitStore.executeQuery(stepCountQuery)
//EDIT.....
let tHeartRate = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)
let tHeartRateQuery = HKSampleQuery(sampleType: tHeartRate!, predicate:.None, limit: 0, sortDescriptors: nil) { query, results, error in
if results?.count > 0
{
var string:String = ""
for result in results as! [HKQuantitySample]
{
let HeartRate = result.quantity
string = "\(HeartRate)"
print(string)
}
testClass.HK_HeartRate = string
finalCompletion(Success: true)
}
}
self.healthKitStore.executeQuery(tHeartRateQuery)
}
}
healthKitStore.requestAuthorizationToShareTypes(healthKitTypesToWrite, readTypes: healthKitTypesToRead, completion: newCompletion)
Я не в состоянии принять значение счетчика шага, он выполняется после вызова второго (метода), plz предлагает мне, что делать?
Если вы не сообщаете, что делает это " второй "метод, что такое код, вы не можете помочь вам. –
Основная очередь работает одновременно. Если вы хотите выполнить 'self.second()' ** после ** вашего глобального блока очереди, вы можете добавить обработчик завершения функции. –
В фоновом режиме Я беру данные набора здоровья, такие как «Счет стека» во втором методе. Мне нужно вызвать API с указанием количества шагов. Следовательно, я не могу принять это значение, потому что второй (метод) вызывается до получения значения в шаге count varaible , –