以下のコードのように、メソッドを使用して歩数計のデータを返すときに、並行性の問題。どのようにして将来の使用のために正しい方法でデータを返すことができますか?ThxiOS並行性の問題:メソッドが歩数計のデータを取得する前に返される
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はそうしましたが、どのように私がすることができます。これを達成する 一つの方法は、このように、値を返すのではなく、あなたの
queryPedometerTodayTotalData
メソッドの完了ブロックを使用することですデータを返しますか? 'func testQueryPedometerTodayTotalData() - > CMPedometerData { var todayData:CMPedometerData? self.queryPedometerTodayTotalData {(データ)in todayData = data } return todayData! } 'これはもう一度クラッシュするつもりです –
非同期なので返すことはできません。完了ブロックで使用します。データを印刷するのではなく、必要な作業をすべて行うことができます。 – marosoaie
ありがとうございます。私はそれに対処するために別の解決策を使用します。しかし、私はなぜ非同期の結果を得ることができなかったのか知りたいのですか?私はインスタンス変数を使用して結果をブロックに保存して戻しましたが、なぜそれがうまくいかない理由を説明してください。 –