Ios 是否使用运行状况数据填充UITableView?
我正试图用健康应用程序中的数据填充我的tableview。问题是每次我加载屏幕时,这些数据的顺序都不同 我有从健康应用程序获取数据的功能:Ios 是否使用运行状况数据填充UITableView?,ios,swift,uitableview,asynchronous,healthkit,Ios,Swift,Uitableview,Asynchronous,Healthkit,我正试图用健康应用程序中的数据填充我的tableview。问题是每次我加载屏幕时,这些数据的顺序都不同 我有从健康应用程序获取数据的功能: func readWalkrunDistance(startDate: NSDate) { healthManager.readRunningAndWalkingDistance(startDate, endDate: selectedDate!) { (results, error) -> Void in dispatch_a
func readWalkrunDistance(startDate: NSDate) {
healthManager.readRunningAndWalkingDistance(startDate, endDate: selectedDate!) { (results, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
var dict: [String: Double] = [String: Double]()
dict["Walkrun Distance"] = results
dict["number"] = 13
if let result = results {
self.walkrunDistance = result
}
self.healthData.append(dict)
self.updateData()
})
}
}
func readBodyMass(startDate: NSDate) {
healthManager.readMedianBodyMass(startDate, endDate: selectedDate!) { (results, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
var dict: [String: Double] = [String: Double]()
dict["Body Mass"] = results
dict["number"] = 7
if let result = results {
self.bodyMass = result
}
self.healthData.append(dict)
self.updateData()
})
}
}
另外10个类似的函数用于其他健康数据。问题是数据每次都以不同的顺序出现,有时walkrunDistance会显示两次等等。我认为这是因为异步调用,但我不知道如何等待这些函数获取数据,然后转到CellForRowatineXpath
以下是调用所有运行状况函数的函数:
func readAllData() {
selectedDate = ProjectManager.sharedInstance.chosenDate
selectedDate = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: 1, toDate: selectedDate, options: [])
let startDate = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -1, toDate: selectedDate, options: [])
self.readActiveEnergyBurned(startDate!)
self.readBasalEnergyBurned(startDate!)
self.readBloodAlcoholContent(startDate!)
self.readBloodPressureDiastolic(startDate!)
self.readBloodPressureSystolic(startDate!)
self.readBodyFatPercentage(startDate!)
self.readBodyMass(startDate!)
self.readDistanceCycling(startDate!)
self.readFlightsClimbed(startDate!)
self.readAverageHeartRate(startDate!)
self.readMinimumHeartRate(startDate!)
self.readMaximumHeartRate(startDate!)
self.readLeanBodyMass(startDate!)
self.readStepCount(startDate!)
self.readWorkouts(startDate!)
self.tableView.reloadData()
}
我想先获取数据,然后以正确的方式将其加载到tableview中。您可以尝试使用dispatch\u group 以下是教程的链接:
- 只需将
变量添加到类中即可李>var group=dispatch\u group\u create()
- 将
添加到所有函数中,并将dispatch\u group\u enter(group)
添加到异步调用的末尾dispatch\u group\u leave(group)
func readWalkrunDistance(起始日期:NSDate){ healthManager.readRunningAndWalkingDistance(开始日期,结束日期:selectedDate!){(结果,错误)->在中无效 调度组输入(组) dispatch\u async(dispatch\u get\u main\u queue(),{()->Void in 变量dict:[String:Double]=[String:Double]() dict[“步行距离”]=结果 dict[“数字”]=13 如果让结果=结果{ self.walkrunDistance=结果 } self.healthData.append(dict) self.updateData() 调度组输入(组) }) } }
- 在self.tableView.reloadData()之前添加
-reloadData
将在所有函数之后被调用。是的,你是对的:)将调度异步(dispatch\u get\u main\u queue(),{()->Void in
替换为调度异步(dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u DEFAULT,0),{()->Void in