//Just a struct to save information about the User
var user = AppUser()
override func viewDidLoad() {
super.viewDidLoad()
//Verify if user is logged in
verifyUser()
user.email = "blabla"
print("viewdidload user: \(user)")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
print("viewdidappear user: \(user)")
}
func verifyUser() {
print("verify user called")
//Log in verification
guard let userID = Auth.auth().currentUser?.uid else {
perform(#selector(handleLogOut), with: nil, afterDelay: 0)
print("nil user")
return
}
ref.child("users").child(userID).observeSingleEvent(of: .value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
self.user = AppUser(dictionary: dictionary)
print(self.user)
}
}) { (error) in
print(error.localizedDescription)
}
}
コンソール:viewDidLoad()funcでFirebaseのデータベースを正しく読み込むには?
verify user called
viewdidload user: AppUser(id: nil, name: nil, email:
Optional("blabla"), completedRegister: nil, FULLUser: nil)
viewdidappear user: AppUser(id: nil, name: nil, email:
Optional("blabla"), completedRegister: nil, FULLUser: nil)
AppUser(id: nil, name: nil, email: Optional("[email protected]"),
completedRegister: Optional(false), FULLUser: Optional(false))
質問は簡単です。誰かが、データベース情報で「ユーザの確認」と「ユーザ」の間に"print("viewDidLoad user:....")"
がどのように印刷されているかを説明することはできますか?
問題は、何らかの理由で関数がviewDidLoadでユーザーの情報を取得しようとしたときに情報が取得されず、値がまだnilである場合です。それは時間の問題ですか? ...
は私が機能verifyUser()の後にループを入れてみましたが、それは決して
out:
while user.email == nil {
print("Waiting...")
}
を取得していないので、質問に
感謝のthats!
編集用Anas Menhar これは私の構造体です。なぜNSObjectである方が良いのでしょうか? 私は(1つの空)INITS異なる2を行うことができますので、私は構造体を行なったし、私はそれだけで印刷した辞書を印刷する場合NSObjectのは、何らかの理由でHitesh
ため
struct AppUser {
var id: String?
var name: String?
var email: String?
var completedRegister: Bool?
var FULLUser: Bool?
init(dictionary: [String: Any]) {
self.id = dictionary["id"] as? String
self.name = dictionary["name"] as? String
self.email = dictionary["email"] as? String
self.completedRegister = Bool((dictionary["completedRegister"] as? String)!)
self.FULLUser = Bool((dictionary["FULLUser"] as? String)!)
}
init() {
self.id = nil
self.name = nil
self.email = nil
self.completedRegister = nil
self.FULLUser = nil
}
}
編集をさせて頂いていませんでしたユーザが情報を完了したのと同じ時間。すべての終わりに。
あなたは辞書= snapshot.value'を聞かせて '印刷することがありますか?これを追加できますか? – Hitesh
AppUserのモーダルクラスを表示してください。クラスのようにする必要があります。ユーザー:NSObject { var id:String? var name:String? var email:String? var imageURL:String? }また、クラスの利点である user.setValuesForKeys(辞書) –