2016-12-27 5 views
0

У меня есть данные, поступающие из базы данных в моем UITableView, когда я пытаюсь свернуть, чтобы обновить все данные в моем табло, повторить сам и когда я пытаюсь поместить новые данные в базу данных и сделать обновление ничего не происходит.Ошибка в UITableview при отключении для обновления, все данные повторяются. Может ли кто-нибудь помочь с использованием Swift3, Xcode8

Это мой код

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() 

} 





} 

ответ

1

Насколько я могу понять, его из-за этот код здесь

for data in mydata { 

    self.mydata.append(data) 
} 

Здесь на самом деле вы перебор данные внутри Tableview, а также добавив данные уже есть, а также получение новых данных, следовательно, в фактическом массиве self.mydata есть 2 набора похожих объектов. Я думаю, что лучший подход был бы, если бы вы могли просто добавить новые данные после запроса или вы можете очистить массив, а затем загрузить все данные из своей базы данных.

Дайте мне знать.

+0

Я пытаюсь сделать это, но когда я добавить новые данные в базе данных моей и понижающие никакой вещи не случится. –

+0

Код, который вы используете сейчас, будет добавлять новые данные и старые данные, следовательно, есть два набора старых данных, поэтому вы получаете дубликаты данных в массиве. –

+0

Вы, люди, хотите удалить func из раскрывающегося списка и вместо него использовать функцию loaddatawithquery? если это означает, что я пытался это сделать, но все-таки та же ошибка. –

0

Вам необходимо обновить свой код следующим образом: -

func pullDown() { 

    var temp = [TestTable]() 

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

} 
+0

Я делаю это, но по-прежнему ту же ошибку не происходит, когда добавляются новые данные и сбрасываются. –

+0

Я отредактировал свой ответ, предположив, что у вас есть новые данные в объекте mydata перед вызовом pullDown. –

+0

по-прежнему та же ошибка нет вещь бывает. –

Смежные вопросы