gpt4 book ai didi

ios - 拉动刷新 : data refresh is delayed

转载 作者:行者123 更新时间:2023-11-28 13:06:18 24 4
gpt4 key购买 nike

我的 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)
}
}
}

表格 View :

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
}

最佳答案

这是你应该如何做的:

  1. 在您的 handleRefresh 函数中,添加一个 bool 值来跟踪正在进行的刷新操作 - 比如 isLoading
  2. 在您的 getCloudKit 函数中,如果 isLoading 为真,则在重新加载 TableView 之前调用 endRefreshing 函数。
  3. isLoading 重置为 false
  4. 重要的是——在刷新操作被实例化之前不要删除你的模型数据。获取数据出错怎么办?只有在 getCloudKit 函数中得到响应后才删除它。
  5. 此外,作为旁注,如果我愿意的话,我会实现一种基于时间戳的方法,我会将我的最后一个服务数据时间戳(最后一次从服务器获取更新的时间)传递给服务器,服务器端会返回我完整的数据只有那个时间戳后有变化,否则我希望他们告诉我没有变化。在这种情况下,我会简单地调用 endRefreshing 函数并且不会重新加载表中的数据。相信我 - 这可以节省很多并提供良好的最终用户体验,因为大多数时候数据没有变化!

关于ios - 拉动刷新 : data refresh is delayed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32674945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com