【问题标题】:Swift pull to reload duplicates objects in table instead of updating快速拉取重新加载表中的重复对象而不是更新
【发布时间】:2015-11-09 21:53:53
【问题描述】:

我正在从 parse 导入数据并尝试添加“拉动刷新”功能,因此如果有人添加一个对象,它将添加到 tableview,但是现在它复制了 tableview 中已有的内容。显然,如果没有添加任何内容并且我刷新什么都不会改变。

非常感谢您的帮助

下面是我的代码

 var refresher: UIRefreshControl!

func Refresh() {
    let query = PFQuery(className: "Events")

    query.orderByAscending("Date")

    query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

        if error == nil {

            // query successful - display number of rows found
            print("Successfully retrieved \(objects!.count) Events")
            if let objects = objects {
                for object in objects {

                    self.postedEvents.append(object.objectForKey("Name") as! String)      
                    self.postedImages.append(object.objectForKey("Image") as! PFFile)
                    self.postedObjects.append(object)

                    self.tableView.reloadData()
                    self.refresher.endRefreshing()
                }
                print(self.postedObjects.count)
                print(self.postedEvents)
            }

        } else {

            // Log details of the failure
            NSLog("Error: %@ %@", error!, error!.userInfo)
        }
    }
}

override func viewDidLoad() {


    refresher = UIRefreshControl()
    refresher.attributedTitle = NSAttributedString(string: "Pull to Refresh")
    refresher.addTarget(self, action: "Refresh", forControlEvents: UIControlEvents.ValueChanged)

    self.tableView.addSubview(refresher)

    Refresh()

    }

【问题讨论】:

    标签: ios swift parse-platform


    【解决方案1】:

    Refresh()的第一行试试:

    self.postedEvents.removeAll()
    self.postedImages.removeAll()
    self.postedObjects.removeAll()
    

    【讨论】:

    • 感谢它的工作。你能解释一下为什么我需要这样做吗?
    • 每次调用Refresh,你append(object)。所以它将包含越来越多的项目。您只需要在新对象进入之前清除它们。顺便说一句,最好将这些代码放在if error == nil 行之后
    • 当我使用刷新时附加没有意义,但这就是它的工作原理。你的回答对我也有帮助,谢谢
    【解决方案2】:

    您可以检查您拥有的最新原始对象的createdAt 时间,并在您的刷新功能中说query.whereKey("createdAt", greaterThanOrEqualTo: self.pastRecentTime),这只会拉取最新的对象。

    【讨论】:

    • 我有一个错误,self.pastRecentTime。我需要在任何地方将其声明为变量吗?我还把那行代码放在哪里?
    • 是的,这是您必须创建的东西,它只是一个类变量,每次运行新查询时都会更新。
    猜你喜欢
    • 2015-10-02
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多