繁体   English   中英

下拉刷新时,UITableview中发生错误,所有数据重复自身。 使用Swift3,Xcode8可以帮助任何人吗

[英]Error in UITableview when pull down to refresh, all data repeating itself. Can any one help using Swift3 , Xcode8

当我尝试下拉刷新表视图中的所有数据时,我会在UITableView来自数据库的数据,而当我尝试将新数据放入数据库中并进行刷新时,则没有任何反应。

这是我的代码

 class MyTable: UITableViewController {

   var refresh = UIRefreshControl()
   @IBAction func SharaOn(_ sender: UIButton) {
   }
   var mydata = [TestTable]()
   let backendless = Backendless()

   override func viewDidLoad() {
   super.viewDidLoad()
   refresh = UIRefreshControl()
   refresh.addTarget(self, action: #selector (MyTable.pullDown), for: .valueChanged)

      tableView.addSubview(refresh)

      }

    override func viewDidAppear(_ animated: Bool) {
         loaddatawithquery()
   }


     override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of  sections
    return 1
     }

     override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       // #warning Incomplete implementation, return the number of rows
       return mydata.count
      }


     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

      if let cell = tableView.dequeueReusableCell(withIdentifier: "mycell") as? MyTableCell{



        let ImgURL = URL(string : self.mydata[(indexPath as NSIndexPath).row].ImgURL!)
       let Desc = self.mydata[(indexPath as NSIndexPath).row].Desc!
        cell.MyText.text = Desc
        cell.mainImage.sd_setImage(with: ImgURL)

        return cell

       }else{

        let cell = MyTableCell()
        let ImgURL = URL(string : self.mydata [(indexPath as NSIndexPath).row].ImgURL)
         let Desc = self.mydata[(indexPath as NSIndexPath).row].Desc

        cell.mainImage.sd_setImage(with: ImgURL)

        cell.MyText.text = Desc!

        return cell
        }


        }


         func updateLikes() {
            let LikeBu = TestTable()
             let updaterecord =       Backendless.sharedInstance().data.of(TestTable.ofClass())


              LikeBu.LikeNo = 1
              updaterecord?.save(LikeBu, response: { (result) in
                  print("udateed successfully \(result)")
                   }, error: { (Fault) in
                   print("EROrrrrrrrrrr")
               })


             }
         func loaddatawithquery(){


    _ = "ImgURL"
    _ = "Desc"
    let dataQuery = BackendlessDataQuery()
    dataQuery.queryOptions.pageSize=50

   // dataQuery.whereClause = whereClause

       backendless.data.of(TestTable.ofClass()).find(dataQuery,response: {(result: BackendlessCollection?) -> Void in
         let data = result?.getCurrentPage()

    for obj in data! as! [TestTable] {

            self.mydata.append(obj)

        //print("&&&&&&&hhhjjjhhvkhkh \(obj.Desc!) &&&&&&&&&&&&&&&&&&")


        self.tableView.reloadData()


        }
        },
        error: { (fault: Fault?) -> Void in

let alert = UIAlertController(title: "info", message:"يرجى الاتصال بالانترنيت", preferredStyle: .alert)

alert.addAction(UIAlertAction(title: "OK", style: .default) { _ in

                                         })

self.present(alert, animated: true){}


    })


}
@IBAction func likebutton(_ sender: AnyObject) {

   // updateLikes()

}


func pullDown() {


    for  data in mydata   {

        self.mydata.append(data)
    }

    self.refresh.endRefreshing()

}





 }

据我了解,这是因为这里的代码

for  data in mydata   {

    self.mydata.append(data)
}

实际上,您是在self.mydata中的数据,还添加了已经存在的数据,还获取了新数据,因此在实际数组self.mydata ,有2组相似的对象。 我认为更好的方法是,您可以只在查询后追加新数据,也可以清空数组,然后从数据库中加载整个数据。

让我知道。

您需要像这样更新代码:

func pullDown() {

   var temp = [TestTable]()

    for  data in mydata   {
        temp.append(data)
    }
    mydata.removeAll()
    mydata = temp
    self.tableView.reloadData()
    self.refresh.endRefreshing()

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM