ios - Swift - 来自 Parse 的表重复记录

标签 ios swift parse-platform

我有一个表,基本上加载来自后端的数据,即解析。现在,在单击单元格并在其他 View Controller (详细 Controller )上成功处理逻辑后,我有一个自动执行的展开转场。这个放松的延续带我们回到同一张 table 。除非我回去时,单元格中显示的相同结果显示两次(重复)。如果我重复上述过程 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
    }

任何解决此问题的帮助将不胜感激。提前致谢。

最佳答案

发生这种情况是因为代码位于 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?这个问题和答案也是一个很好的引用。

关于ios - Swift - 来自 Parse 的表重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011964/

相关文章:

android - 使用缓存策略 "CACHE_THEN_NETWORK"在 ListView 中添加重复行

iphone - 所有触地事件上的按钮声音

ios - Swift NSAttributedString 是否呈现 JavaScript?

ios - Socket.io监听方法在一段时间或失去Internet连接后不监听

ios - 未存档对象数据时面临的问题

json - 从 Firebase 存储中获取图像

ios - 如何在使用 swift 单击按钮时解析 youtubeURL 以从 parse.com 加载视频

objective-c - 清除给定 iOS 应用程序的 cookie

ios - 是否可以从共享扩展执行 API 调用

python - 解析剩余调用从指针数组获取数据