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
}
答案 0 :(得分:2)
你是关于并发问题的。您应该在queryPedometerDataFromDate
的处理程序中使用结果。
实现此目的的一种方法是为queryPedometerTodayTotalData
方法使用完成块,而不是让它返回一个值,如下所示:
func queryPedometerTodayTotalData(completion:((CMPedometerData?)->())) {
var pedometerDataOfToday: CMPedometerData?
self.queryPedometerDataFromDate(NSDate.today()!, toDate: NSDate(), withHandler: { (pedometerData, error) in
pedometerDataOfToday = pedometerData!
completion(pedometerData)
})
}
func testQueryPedometerTodayTotalData() {
self.queryPedometerTodayTotalData { (data) in
print(data)
}
}
答案 1 :(得分:0)
这是一个并发问题。 queryPedometerDataFromDate
是一种异步方法。它会在iOS认为它时执行完成块(通常是在它检索到数据之后),这就是第二个打印行首先打印并且不返回结果的原因。
您需要使用完成块内的完成块中的pedometerData
,或者调用将处理完成块结果的方法/委托。