私のアプリでは、ユーザーがUITextField
にメールとパスワードを入力できるビューコントローラを持っています。その後、Firebaseを使ってユーザーをログインさせ、メールに関連付けられたuidを特定します。私はまたUser
と呼ばれる構造体を持っています。これにはユーザー名とユーザーIDの文字列と文字列の配列が含まれています(必要ではないと思いますので、コードを提供していません。Firebaseユーザデータをクラス間で永続化するようにアプリを設定するにはどうすればよいですか?
FIRAuth.auth()?.signIn(withEmail: usernameTextBox.text!, password: passwordTextBox.text!) { (user, error) in
if error == nil {
//Valid Email and Password
let userID = FIRAuth.auth()?.currentUser?.uid
self.childRef.observe(.value, with: { snapshot in
for item in snapshot.children.allObjects as! [FIRDataSnapshot] {
let dict = item.value as! Dictionary<String,Any>
if (dict["UserID"] as? String == userID) {
self.currentUser = User(snapshot: item) //<----This is where currentUser is assigned the new User
}
//currentUser = User(snapshot:)
self.performSegue(withIdentifier: "LoginSegue", sender: sender)
}
})
}
else {
//Error stuff
}
}
私の問題は、次のとおりです。
は、私は前述のUIDを使用してFIRDataSnapshot
を持つユーザーを初期化するために、次の手順を実行
var currentUser:User? = nil
及びログインボタンの@IBaction
方法で
ログインしているコントローラと他のビューコントローラの間にSWRevealViewControllerがあり、SWRevealViewControllerがよくわからないObjective-Cで記述されているので、prepareForSegue
は使用できません。私の研究は、いくつかの可能性がグローバル変数とシングルトンであるかもしれないことを明らかにしましたが、どちらかを使用することは多くのプログラマーにとって安全でない練習と見なされます。また、NSUserDefaults
(私はSwift 3のUserDefaults
に名前が変更されたと思います)はもう一つの潜在的な解決策ですか?私はどんな提案にも開放的です。
ありがとうございます。
他の誰かが他の方法を言及していない限り、基本VCから新しいVCのインスタンス化にアクセスできない限り、NSUserdefaultsを使用することをお勧めします。これはカスタムオブジェクトであるため、NSDataを使用してアーカイブし、保存してから、アーカイブ解除して新しいVCで使用することができます。 http://stackoverflow.com/questions/29986957/save-custom-objects-into-nsuserdefaults – Munib
私があなたの質問を正しく理解していれば、どのビューでもこれを行うことができます。 –
ほとんどの開発者は、非常に簡単であるため、ユーザーデータを保存して取得するために 'UserDefaults'を使用しています。方法。より安全な場所にユーザーの資格情報を保存する場合は、 'KeyChain'を使用してください。 –