Ios 整个应用程序生命周期内的Firebase observer
我正在尝试创建一个firebase观察器,它在整个应用程序生命周期中都保持活动状态。我想要的是在firebase中的某些数据更改时更改tabBarController的属性。这是我的密码:Ios 整个应用程序生命周期内的Firebase observer,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我正在尝试创建一个firebase观察器,它在整个应用程序生命周期中都保持活动状态。我想要的是在firebase中的某些数据更改时更改tabBarController的属性。这是我的密码: self.ref.child("mySubRef").observe(.value , with: {snapshot in self.tabBarController?.tabBar.items?[3].badgeValue = "!" }) 因此,我尝试在我的第一个viewC
self.ref.child("mySubRef").observe(.value , with: {snapshot in
self.tabBarController?.tabBar.items?[3].badgeValue = "!"
})
因此,我尝试在我的第一个viewController的viewDidLoad中以及ViewDidDisplay中创建它。我不移除它,因为我希望它一直在那里。在ViewDidDisplay中,仅当我在更改时处于该viewController中时,它才起作用。如果我希望无论身在何处(总是在选项卡栏中)都能进行更改,那么我必须将代码放在何处
谢谢你的帮助 我认为,您可以使用Appdelegate didFinishLaunchingWithOptions方法,但我不确定 像这样:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()
FIRDatabase.database().reference().child("mySubRef").observe(.value, with: { (snapshot) in
//I'm not sure for this part.
UITabBarController.init().tabBar.items?[3].badgeValue = "!"
})
return true
}
我找到了答案。问题是,当我在ViewController之间更改时,对观察者的引用被取消分配。为了解决这个问题,我创建了一个类,如下所示:
class NotificationListener: NSObject {
let ref:FIRDatabaseReference = FIRDatabase.database().reference()
var user:User?
func setUpListener(tabBarController:UITabBarController){
self.user = User()
self.ref.child("users/" + self.user!.uid + "/notifications").observe(.value , with: {snapshot in
tabBarController.tabBar.items?[3].badgeValue = "!"
})
}
}
现在,我在每个viewController中都有一个该类的属性,每个属性都有一个对同一对象的引用。当我在VC之间切换时,它不会取消分配对象,因为它仍然会被引用。感谢您的回答,问题是我需要查看控制器提供一些信息(我需要记录用户),是否有任何方法可以从viewController执行此操作?另一种方法是计时器方法。此方法在指定的时间重复操作。如果要对另一个控制器重复操作,请查看此项。不要调用invalidate方法。或者,您可以直接检查用户是否登录了appdelegate。我无法以我的应用程序结构化的方式执行此操作。无论如何,我已经找到了答案,谢谢你的帮助!你能分享答案吗?也许我需要它:)