【发布时间】:2016-12-18 16:38:35
【问题描述】:
我有来自 CloudKit 的静态数据(3 个值),问题是当我刷新 UITableView 时,我得到 6 个值而不是 3 个值。
我不知道为什么它不刷新并丢弃Array 中的旧数据,而是保留旧数据并向其中添加相同的数据Array。
初始UITableView设置:
func getData() {
cloud.getCloudKit { (game: [Game]) in
var teamColorArray = [String]()
for item in game {
let itemColor = item.teamColor
teamColorArray.append(itemColor)
print("TCA in: \(teamColorArray)")
}
self.teamColorArray = teamColorArray
self.tableView.reloadData()
}
}
打印:["CC0033", "FDB927", "E3263A"]
拉动UIRefreshControl时刷新数据:
@IBAction func refreshData(_ sender: Any) {
self.teamColorArray.removeAll()
getData()
self.refreshControl?.endRefreshing()
}
打印:[“CC0033”、“FDB927”、“E3263A”、“CC0033”、“FDB927”、“E3263A”]
我想我已经把它缩小到某种方式 game 在函数 getData() 被递增到 6 个项目的计数。我不确定如果它从CloudKit 中提取所有新数据,为什么它不会总是停留在 3 个项目上,但也许我不明白调用完成处理程序会使值加倍,也许我需要removeAll在里面?我真的不确定
有没有人发现我做错了什么,或者他们会做些什么来修复我的代码?
谢谢!
【问题讨论】:
-
如果您希望或期望您的数组是唯一的,那么只需使用集合而不是数组。这样你就不会得到重复的数据。请参阅帖子 (stackoverflow.com/questions/27624331/…)。
-
@ErionV 是的好信息,我实际上在想我可能最终会尝试一个 Set,但不确定我是否在我目前所拥有的东西中搞砸了一些更简单的东西。感谢您重申尝试套装的可能性!
标签: ios swift uitableview uirefreshcontrol completionhandler