在过去一周中,我每天花费约13个小时,但似乎无法解决。我已经滚动到网络的末端,但是似乎无法正确地对我的表实施'query.skip'和'query.limit'。

“用户”关注的是每个人,每个人都有很多帖子。我想加载第一个5,然后在用户向下滚动表格时加载下一个5。

我关注的用户共有19篇帖子。

问题:第一次运行时,一切正常,但是当我滚动到第四行时,它应该运行,跳过= 5,限制= 10,依此类推。但是,当它运行“ loadFollowersImages()”函数时,它将开始加载15个对象,然后加载30个,46个……一切重复并加倍。

我究竟做错了什么?为什么不跳到限制并将新限制加5。

我的viewDidLoad:

override func viewDidAppear(animated: Bool) {

    if resultsHasNameArray.count == 0 {

        // to start download 5 posts

        skip = resultsHasNameArray.count
        limit = resultsHasNameArray.count + 5

        getFollowingData() {

    }

}


获取用户关注的人员列表:在这种情况下,这是两个用户

func getFollowingData() {

    var followQuery = PFQuery(className: "follow")
    followQuery.whereKey("user", equalTo: PFUser.currentUser()!.username!)

    var objects = followQuery.findObjects()

    for object in objects! {

        self.followArray.append(object.objectForKey("userToFollow") as! String) // stores all the usernames Current user is following
    }

    loadFollowersImages() // once we know who we are following, start to download their "posts"

}


返回两个用户:James和Amy

现在下载他们的帖子:总共19
首先下载5个帖子。

func loadFollowersImages(){

    var photoQuery = PFQuery(className: "PostPhoto")

    photoQuery.skip = skip!      // oringally to 0
    photoQuery.limit = limit!    // oringally to 5

    photoQuery.whereKey("username", containedIn: followArray)
    photoQuery.addDescendingOrder("createdAt")

    photoQuery.findObjectsInBackgroundWithBlock {
        (objects:[AnyObject]?, error: NSError?) -> Void in

        if error == nil {

            for object in objects!{

                self.resultsHasNameArray.append(object.objectForKey("username") as! String)
                self.resultsHasUserImageFile.append(object.objectForKey("userImageFile") as! PFFile)

                self.resultsTable.reloadData()

            }

        }
    }


成功返回5个帖子。

现在,当用户向下滚动到5行时,它应该运行上面的(loadFollowersImages())方法,并添加5来跳过,添加5来限制(分别为5、10)。

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

    if indexPath.row  == limit! - 1{   // when scrolling down, if our limit meets index path run

        skip = skip! + 5               // adds '5' to skip
        limit = limit! + 5             // adds '5' to limit

        loadFollowersImages()          // runs above method
    }

}

最佳答案

您不想更改该限制,您只想下载下一个5,因此在所有交互过程中该限制仍然为5,您唯一需要更改的数字是要跳过的行数,但是这需要在if中进行调整现在,您要在显示的行等于限制加上已跳过的行数时运行loadFollowersImages函数,如下所示:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

        if indexPath.row  == limit! + skip! - 1{
        // when scrolling down, if our limit + rows skiped meets index path run
            skip = skip! + 5               // adds '5' to skip and limit is constante
            loadFollowersImages()          // runs above method
        }

    }

10-01 16:51