0
У меня есть Pull to Refresh, работающий отлично, за исключением случаев, когда таблица перезагружается, есть разделенная вторая задержка до перезагрузки данных в таблице.Pull to Refresh: обновление данных задерживается
Есть ли у меня какая-то маленькая вещь? Есть идеи?
viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
self.refreshControl?.addTarget(self, action: "handleRefresh:", forControlEvents: UIControlEvents.ValueChanged)
self.getCloudKit()
}
handleRefresh
для Прицепные Обновлять:
func handleRefresh(refreshControl: UIRefreshControl) {
self.objects.removeAll()
self.getCloudKit()
dispatch_async(dispatch_get_main_queue(), {() -> Void in
refreshControl.endRefreshing()
})
}
нужны данные в двух местах, так что создали функцию для него getCloudKit
:
func getCloudKit() {
publicData.performQuery(query, inZoneWithID: nil) { results, error in
if error == nil { // There is no error
for play in results! {
let newPlay = Play()
newPlay.color = play["Color"] as! String
self.objects.append(newPlay)
}
dispatch_async(dispatch_get_main_queue(), {() -> Void in
self.tableView.reloadData()
})
} else {
print(error)
}
}
}
tableView
:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
let object = objects[indexPath.row]
if let label = cell.textLabel{
label.text = object.matchup
}
return cell
}
Вы не должны называть 'endRefreshing' до того, как вы назовете' reloadData' в блоке отправки – Paulw11
@ Paulw11 Спасибо за ответ! Думаю, теперь это имеет смысл. Но как бы я это сделал в коде, который у меня есть, потому что я не хотел бы правильно «endRefreshing» в моей функции getCloudKit' (потому что мне нужно использовать 'endRefreshing' для Pull To Refresh, а не' viewDidLoad'?)? – SRMR
Вы можете вызвать endRefreshing независимо. Если элемент управления не находится в состоянии refreshingg, он просто проигнорирует его. – Paulw11