下拉刷新时 UITableview 出错,所有数据重复。任何人都可以帮助使用 Swift 3 , Xcode 8
Posted
技术标签:
【中文标题】下拉刷新时 UITableview 出错,所有数据重复。任何人都可以帮助使用 Swift 3 , Xcode 8【英文标题】:Error in UITableview when pull down to refresh, all data repeating itself. Can any one help using Swift3 , Xcode8 【发布时间】:2016-12-27 17:28:44 【问题描述】:我的 UITableView
中有来自数据库的数据,当我尝试下拉以重复刷新我的 tableview 中的所有数据时,以及当我尝试将新数据放入数据库并进行刷新时没有任何反应。
这是我的代码
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
中,有两组相似的对象。
我认为更好的方法是您可以在查询之后附加新数据,或者您可以清空数组然后从数据库中加载整个数据。
告诉我。
【讨论】:
我尝试这样做,但是当我在我的数据库中添加新数据并下拉时没有任何事情发生。 您现在使用的代码将追加新数据和旧数据,因此有两组旧数据,因此您在数组中得到重复数据。 你们是不是要删除 pulldown 的功能并使用 loaddatawithquery 的功能来代替它?如果是这个意思,我尝试这样做,但仍然是同样的错误。 不,在 pulldown 的 func 内部,而不是追加,调用具有更大页面大小的 func loaddatawithquery(更大的数组计数,您希望在 pull 后显示) 好的,我做到了,但仍然是同样的错误,所有数据都会再次自我重复。【参考方案2】:你需要像这样更新你的代码:-
func pullDown()
var temp = [TestTable]()
for data in mydata
temp.append(data)
mydata.removeAll()
mydata = temp
self.tableView.reloadData()
self.refresh.endRefreshing()
【讨论】:
我这样做了,但仍然是同样的错误,当添加新数据并下拉时没有任何事情发生。 我已经编辑了我的答案,假设您在调用 pullDown 之前在 mydata 对象中有新数据。以上是关于下拉刷新时 UITableview 出错,所有数据重复。任何人都可以帮助使用 Swift 3 , Xcode 8的主要内容,如果未能解决你的问题,请参考以下文章
IOS学习之UiTableView下拉刷新与自动加载更多,百年不变的效果
编程 .beginRefresh() 不刷新 UITableView 中的数据