Swift 在Firebase注销时刷新视图控制器

Swift 在Firebase注销时刷新视图控制器,swift,firebase,Swift,Firebase,我有一个视图控制器,它有一个UICollectionView,其中包含从Firebase提取的信息。当用户访问此视图控制器时,其信息将放置在集合视图单元格中 但是,当用户注销并使用其他帐户登录时,前一个用户的数据将保留在集合视图中,而不是重新填充新用户的信息 现在从viewDidLoad()调用所有内容: loadData()和loadOngoingQuest()将信息从Firebase拉入用于填充集合视图的数组 我尝试在viewwillappease()中添加所有内容,但它会导致一些小问题,因

我有一个视图控制器,它有一个UICollectionView,其中包含从Firebase提取的信息。当用户访问此视图控制器时,其信息将放置在集合视图单元格中

但是,当用户注销并使用其他帐户登录时,前一个用户的数据将保留在集合视图中,而不是重新填充新用户的信息

现在从
viewDidLoad()
调用所有内容:

loadData()
loadOngoingQuest()
将信息从Firebase拉入用于填充集合视图的数组

我尝试在
viewwillappease()
中添加所有内容,但它会导致一些小问题,因为集合视图涉及滚动和其他动画,我不希望每次视图控制器出现时都运行这些动画


基本上,我只想在用户每次注销时重新加载整个视图控制器。我该怎么做呢?

您应该这样做,有关更多信息,请参阅评论:

let firebaseAuth = FIRAuth.auth()
do {
    try firebaseAuth?.signOut()
    // clear the array that your collectionView is based on
    // reload your collectionView (which will clear all the data since your array is empty)
} catch let signOutError as NSError {
    print ("Error signing out: %@", signOutError)
}
更新:
另一种处理方法:

使用以下属性创建一个
Struct

struct Global {
    var isNewUser = false
}
无论何时注销用户,请执行以下操作:

Global.isNewUser = true

collectionView
中,检查
Global.isNewUser==true
然后重新加载所有内容,最重要的是设置
Global.isNewUser=false
。这样,您只需加载所有内容一次。

在经历了很多挫折之后,我终于找到了问题所在

这与刷新集合视图或视图控制器无关。我使用Firebase参考错误。我在一个结构中保存了两个引用作为全局常量,希望不必在每个VC上声明它们。就是这样,

struct GlobalConstants {

    struct Refs {
        static let userRef = AppDatabaseReference.users(uid: (Auth.auth().currentUser?.uid)!).reference()
        static let currentUser = Auth.auth().currentUser?.uid
    }

}
然后,我会在代码中的任何地方使用它们,如下所示:

var questsRef = var questsRef = GlobalConstants.Refs.userRef.reference().child("quests")
这将导致问题,除非我终止应用程序并再次打开它,刷新这些变量


我回到了在每个VC的顶部声明
let userRef=AppDatabaseReference.users(uid:(Auth.Auth().currentUser?.uid)!).reference()
,它解决了这个问题

注销函数和数组不共享同一个视图控制器我提到过我尝试过该解决方案,但它不适合我的情况,因为每次VC出现时它都会重新加载数据,在我希望加载所有动画时一遍又一遍地运行所有动画once@sinio,. 添加了一个更适合您的解决方案,请尝试。谢谢!这在一定程度上是可行的。它刷新数组和集合视图。但是,新用户登录时仍会加载旧用户的信息。只有在我终止并再次打开应用程序时,它才会重新加载。
viewDidLoad()
上一定发生了什么我不知道的事情,我已经想了好几天了。@sinio,将用户数组存储在全局中,然后做同样的事情。
var questsRef = var questsRef = GlobalConstants.Refs.userRef.reference().child("quests")