我有一个表基本上加载来自后端的数据,即Parse。现在单击一个单元格并在其他视图控制器(细节控制器)上成功处理逻辑后,我有一个自动执行的展开segue。这个展开segue将我们带回到同一张桌子。除非我回去,在细胞中显示的相同结果显示两次(重复)。如果我重复上述过程3次,我会看到每个记录重复3次,依此类推。
我在这里阅读其他帖子,更好地清除阵列,我做了但似乎它不起作用。或者可能是我在错误的地方清除它。
以下是viewWillAppear的代码:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
SwiftAddressBook.requestAccessWithCompletion({ (success, error) -> Void in
if success {
if let people = swiftAddressBook?.allPeople {
let arrayOfArrays = people.flatMap({$0.phoneNumbers?.map( {$0.value})})
let finalArray = arrayOfArrays.flatMap({ $0 })
self.numbersArray = self.getCleanNumberArrayFromArrayInput(finalArray)
}
dispatch_async(dispatch_get_main_queue()) {
self.getUsersMatchingNumbers({ (result)->Void in
self.userMatchArray = []
self.userMatchArray = result
self.tableView.reloadData()
})
}
}
else {
//no success. Optionally evaluate error
print("Access Red")
}
})
}
这是cellForRowAtIndex:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "cell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! ContactTableCell
let row = indexPath.row
if(self.userMatchArray.count > 0 )
{
cell.name.text = self.userMatchArray[row]["name"] as? String
}else{
cell.name.text = "You have no friends yet"
}
return cell
}
任何有助于整理出来的帮助将不胜感激。提前致谢。
答案 0 :(得分:0)
这种情况正在发生,因为代码在viewDidAppear
方法中。每次用户返回VC
时,查询都会重复发生。
不要把它放在viewDidAppear
中。
添加@ Devster101评论,你应该创建一个fetchData
函数或UIRefreshControl
来处理事件(或类似的事情)。
您可以创建如下的刷新功能:
var refresher: UIRefreshControl!
func refresh() {
//do your query here
}
然后在viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
refresher = UIRefreshControl()
refresher.attributedTitle = NSAttributedString(string: "Pull to refresh")
refresher.addTarget(self, action: "refresh", forControlEvents: UIControlEvents.ValueChanged)
self.tableView.addSubview(refresher)
refresh()
}
这样,您就可以为用户供电。
Does dispatch_async(dispatch_get_main_queue(), ^{...}); wait until done?这个问题和答案也是一个很好的参考。