如何刷新表视图以使索引也更新?

Posted

技术标签:

【中文标题】如何刷新表视图以使索引也更新?【英文标题】:How to refresh table view such that index is updated too? 【发布时间】:2018-03-10 03:14:36 【问题描述】:

目前,我正在实施一个帖子系统,这样用户可以使用 firebase 点赞帖子,但只能点赞一次。帖子被点赞后,firebase 会更新日期,并且应用会根据点赞日期对帖子重新排序,因此

if changedPost.Revealed == "true" 

     changedPost.revealDate = value["revealedDate"] as? Double ?? 00000
     self.orderedPostList = self.postList.sorted(by:  $0.revealDate! > $1.revealDate! )
     if let newName = snapshot.childSnapshot(forPath: "information").value as? NSDictionary 

           changedPost.name = newName["posterName"] as? String ?? "Poster not found"
     
     self.tableView.reloadData()       
   

点赞机制基于

 let location : CGPoint = sender.location(in: self.tableView)

        if let indexPath = tableView.indexPathForRow(at: location)?.row 

            let postIDLocation = postList[indexPath]
            let postIDPressed = postIDLocation.postID
            let numberOfRevealsPostNeeds = postIDLocation.revealsRequired
            let numberOfReveals = Int(postIDLocation.Reveals!)
            let revealReference = Database.database().reference().child("reveals").child(postIDPressed!)

            revealReference.observeSingleEvent(of: .value, with:  (snapshot) in
                let userID = Auth.auth().currentUser?.uid

                if snapshot.hasChild(userID!) 
                    print ("hello")
                
                else 

                    revealReference.updateChildValues([userID!: "true"])
                    let postRef = Database.database().reference().child("posts").child(postIDPressed!)
                    let addedReveal = numberOfReveals + 1

问题是,用户点赞帖子后,它会移动到提要的顶部,这样一个新帖子就会占据该帖子曾经占据的位置。但是,用户现在无法喜欢那里的帖子,因为表格视图上的那个位置曾经被现在喜欢的帖子占据。当用户重新启动应用程序时,他们可以点赞占据曾经持有该帖子的帖子的位置的帖子。有没有办法在帖子重新排序后重新调整表视图索引?它们目前存储在字典中,如下所示:

orderedPostList = postList.sorted(by:  $0.revealDate! > $1.revealDate! )

我已尝试刷新表视图,但索引仍与错误的帖子相关联。基本上,这些帖子是从 firebase 获取的,然后根据他们喜欢的日期分类到字典中;但是,当点赞日期发生变化时,帖子位置会发生变化,但占据点赞帖子之前位置的新帖子无法被点赞,直到应用重新启动并刷新索引。

【问题讨论】:

这看起来不像是展示代码的好方法。 @El Tomato 是什么意思?我应该重新组织问题吗?我认为这是与该问题唯一相关的代码。 您缺少三个或更多大括号。 @ElTomato 我排除了那些,只包括代码的相关部分。如果我将代码继续到大括号,还会发生其他事情。谢谢你的建议。 【参考方案1】:

问题在于类似机制使用的是无序字典。当我让 like 机制的手势识别器使用有序字典中的索引时,like 会转到正确的帖子。

【讨论】:

以上是关于如何刷新表视图以使索引也更新?的主要内容,如果未能解决你的问题,请参考以下文章

iphone索引表视图问题

如何刷新数据透视图

如何在 MS Access 数据表视图中使用存储过程更新表数据

SQL Server 视图何时更新?

如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间

表视图搜索栏