Swift - 来自Parse的表重复记录

时间:2016-01-26 10:42:04

标签: ios swift parse-platform

我有一个表基本上加载来自后端的数据,即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
    }

任何有助于整理出来的帮助将不胜感激。提前致谢。

1 个答案:

答案 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?这个问题和答案也是一个很好的参考。