如何解决分页问题,​​我的功能无法正常使用

时间:2019-06-27 10:38:40

标签: ios swift

我在我的应用程序中使用分页,数据来自服务器。当我使用该函数并重新加载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

3 个答案:

答案 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()
}