2017-10-05 64 views
0

我想维护一个用户在Swift IOS应用程序的登录记录。 我有一个登录视图控制器,在成功登录用户后,我发布通知。如何在swift中更改现有通知的用户信息?需要维护用户登录记录

let infodict = ["userLoggedIn": true] 
NotificationCenter.default.post(name: 
NSNotification.Name(rawValue:"NotificationuserLoggedIn"), object: nil, userInfo: infodict) 

而且在我的主页视图控制器的viewDidLoad中,我加入观测者喜欢

NotificationCenter.default.addObserver(self, selector: 
#selector(self.toggleLoginButtonText(_:)), name: 
NSNotification.Name(rawValue:"NotificationUserLoggedIn"), object: nil) 

观察员将调用函数“toggleLoginButtonText”。在此功能中,我正在切换登录按钮的文本。如果用户登录,则按钮文本应为“注销”,否则为“登录”。一切正常,直到现在。

问题:我希望每当用户按下按钮注销时,我都会更新同一通知的用户信息。然后我会调用“toggleLoginButtonText”函数,它会检查通知值。如果“userLoggedIn”的值(因为用户注销),我的功能将改变登录按钮的文本。

所以总结,我的问题是两倍。

  1. 如何更新我的通知的用户信息时,在用户登录和注销
  2. 这是处理用户登录记录的好办法,或者有比这更好的方式?

    我还有一个想法。 “当用户注销时,在我的家庭控制器中发布另一个通知和观察者,并且当用户再次登录时,发布另一个通知,等等。”。但我似乎是一个重复的任务给我。

我查找了这些问题的答案。但是,如何使用我已经通过的通知传递数据只有答案。

How to pass data using NotificationCentre in swift 3.0 and NSNotificationCenter in swift 2.0?

How to pass data using NotificationCentre in swift 3.0 and NSNotificationCenter in swift 2.0?

回答

1

更好的解决方案是使用UserDefaults。将用户默认值中的布尔值存储在密钥“isLoggedIn”中,并在用户登录时将其设置为“真”,并在注销时将其设置为“假”。鉴于家庭VC的独特功能,请在“isLoggedIn”键上读取UserDefaults的值(布尔值)并更改所需的值。

1

不知道如果我理解正确的话,当然你可以通过不同的字典每次用您的通知。而不是let infodict = ["userLoggedIn": true],做let infodict = ["userLoggedIn": isUserLoggedIn],其中isUserLoggedIn是您的Bool变量的登录状态。

但总的来说,我建议你有一个共享的实例,如LoginManager这将保存和更新您的登录状态,并可以被所有视图控制器访问。因此,在您的视图控制器,你可以检查是这样的:

if LoginManager.shared.isUserLoggedIn { 
    // do something 
} 

你可以使用通知,里面一般是双数,而不是状态的更多有用的结合这一点。例如,使用诸如userDidLoginuserDidLogout之类的平铺的通知。

+0

如何访问登录管理器。它是模块还是库? –