2017-10-05 74 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

如何訪問登錄管理器。它是模塊還是庫? –

相關問題