我在我的应用程序中使用分页,数据来自服务器。当我使用该函数并重新加载tableView时,它不会在tableview中显示任何更改。
当显示数据时,不使用分页,它可以完美工作。但是,分页会带来很多错误。
ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
currentUserImage()
activityShown()
refreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh")
refreshControl.addTarget(self, action: #selector(refresh(sender:)), for: UIControl.Event.valueChanged)
tableView.addSubview(refreshControl)
}
刷新
@objc func refresh(sender: AnyObject) {
activityArray.removeAll()
tableView.reloadData()
activityShown()
refreshControl.endRefreshing()
}
分页
func activityShown() {
current_page = current_page + 1
let headers = ["Authorization":"Bearer \(UserDefaults.standard.string(forKey: "token")!)"]
//---------------------- Alamofire for User Profile ---------------------//
let parameters: Parameters = [
"per_page": per_page,
"page": current_page
]
Alamofire.request(Constants.activitiesURL,method: .get, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON { response in
if response.result.isSuccess {
let ActivityJSON : JSON = JSON(response.result.value!)
let activityData = ActivityJSON["data"].arrayValue
for value in activityData {
let activity = Activity()
activity.name = value["name"].stringValue
activity.content = value["content"].stringValue
activity.published = value["published"].stringValue
activity.thumbnail = value["users"]["photo_thumb"].stringValue
activity.likesCount = value["likes_count"].intValue
activity.liked = value["liked"].intValue
activity.heartCount = value["heart_count"].intValue
activity.hearted = value["hearted"].intValue
activity.commentsCount = value["comments_count"].intValue
activity.commented = value["commented"].intValue
activity.id = value["id"].intValue
activity.currentID = value["users"]["user_id"].intValue
print("Like \(activity.liked!)")
print("heart \(activity.hearted!)")
self.activityArray.append(activity)
}
self.Total_activities = ActivityJSON["meta"]["pagination"]["total"].intValue
self.pCount = ActivityJSON["meta"]["pagination"]["count"].intValue
self.per_page = ActivityJSON["meta"]["pagination"]["per_page"].intValue
self.current_page = ActivityJSON["meta"]["pagination"]["current_page"].intValue
self.total_pages = ActivityJSON["meta"]["pagination"]["total_pages"].intValue
// DispatchQueue.main.async {
self.tableView.reloadData()
self.refreshControl.endRefreshing()
// }
}
else {
print("Error \(String(describing: response.result.error))")
}
}
}
这是我的职责。并因此而得到的输出是当我刷新tableView时。它没有刷新tableView
答案 0 :(得分:0)
我认为问题在于您已注释掉主线程代码。您需要在reloadData()
内部调用DispatchQueue.main.async
方法。另外,问题可能是当您调用endRefreshing
方法的refresh
方法时,并且在该方法内部您要删除activityArray
内的所有元素。
答案 1 :(得分:0)
在将数据添加到数组中之后,写这两行。
response.result.isSuccess块
https://unpkg.com/jspdf@1.5.3/dist/jspdf.min.js
答案 2 :(得分:0)
您需要从refresh(sender:)
方法中删除以下行,
activityArray.removeAll()
由于在分页中,您要在activityArray
中添加元素,所以无需删除以前获取的数据。
在上面的行中,分页将无法正常工作,因为activityArray
仅包含新获取的activities
。
甚至不需要refresh(sender:)
方法。您可以将activityShown()
直接添加到refreshControl's
selector
,即
refreshControl.addTarget(self, action: #selector(activityShown), for: UIControl.Event.valueChanged)
在获取数据后,您可以简单地调用tableView.reloadData()
和refreshControl.endRefreshing()
,即
DispatchQueue.main.async {
self.tableView.reloadData()
self.refreshControl.endRefreshing()
}