comme le code ci-dessous, quand je veux retourner un podomètre par une méthode pour une certaine connivence, mais la méthode retournée plus tôt que les données soient récupérées. problème de concurrence. Comment est-ce que je pourrais renvoyer les données d'une manière correcte pour l'usage futur? ThxiOS Problème de concurrence: méthode retournée avant d'avoir les données du podomètre
func queryPedometerTodayTotalData() -> Int {
var pedometerDataOfToday: CMPedometerData?
self.queryPedometerDataFromDate(NSDate.today()!, toDate: NSDate(), withHandler: { (pedometerData, error) in
pedometerDataOfToday = pedometerData!
print("this print after got data in a background thread:\(pedometerDataOfToday)")
})
print("This should print before last print, and there haven't got the data now: \(pedometerDataOfToday)")
return pedometerDataOfToday
}
thx.I a fait, il pourrait imprimer correctement les données, mais comment pourrais-je à retourner les données? 'func testQueryPedometerTodayTotalData() -> CMPedometerData { var aujourd'huiData: CMPedometerData? self.queryPedometerTodayTotalData {(données) dans todayData = données } retourner aujourd'huiData! } '
Cela va se bloquer à nouveau –
Vous ne pouvez pas le retourner car il est asynchrone. Vous l'utilisez dans le bloc d'achèvement. Au lieu d'imprimer les données, vous pouvez faire ce que vous voulez avec. – marosoaie
Alors appréciez. J'utilise une autre solution pour le traiter. Mais je veux vraiment savoir pourquoi je n'ai pas pu obtenir ou retourner un résultat asynchrone? J'ai utilisé une variable d'instance pour enregistrer le résultat dans le bloc et revenir, pourriez-vous expliquer pourquoi cela ne fonctionne pas, encore –