捕获用户名以在新帖子中写入

时间:2016-05-07 02:50:20

标签: ios swift firebase closures

当用户登录时,其UID设置为standardUserDefaults()。此外,用户'个人资料数据保存在名为其uid的子项下。

当用户创建帖子时,我想将其用户名/显示名称附加到帖子中。

我已经设置了一个功能来获取当前用户的用户名,但每当我提交帖子时,好像关闭没有被执行。

帖子模型:

class PostModel {
    var postBody = String()
    var creationDate = String()
    var postUID = String()
    var userName = String()

    init(postBody: String) {
        self.postBody = postBody
        let dateObject = NSDate()
        let formatDate = timeToString(dateObject)
        self.creationDate = formatDate
        let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String
        self.postUID = userID
        self.userName = getUsername(userID)
    }

    // Used to convert the model to json compatible before saving
    func postToDictionary() -> NSDictionary {
        let jsonBody = postBody
        let jsonDate = creationDate
        let jsonUID = postUID
        let jsonUsername = userName
        let postAsDictionary = ["Body": jsonBody, "Timestamp": jsonDate, "UID": jsonUID, "Display Name": jsonUsername]
        return postAsDictionary
    }
}

以及获取用户名的函数:

func getUsername(withUID: String) -> String {
    var userName = String()
    DataService.ref.userRef.childByAppendingPath(withUID).observeSingleEventOfType(.Value, withBlock: { snapshot in
        userName = snapshot.value.objectForKey("Display Name") as! String
    })
    return userName
}

1 个答案:

答案 0 :(得分:0)

我设置登录功能以获取当前用户的显示名称并将其设置为有效的standardUserDefaults。我相信这是我的解决方案,除非有人有更好的建议

    @IBAction func loginButton(sender: AnyObject) {
      if emailField != nil && passwordField != nil {

        let emailAttempt = emailField.text!
        let passwordAttempt = passwordField.text!
        DataService.ref.baseRef.authUser(emailAttempt, password: passwordAttempt) {
            error, authData in
            if error != nil {
                print("error in data check")
            } else {
                let returnUID = authData.uid
                NSUserDefaults.standardUserDefaults().setValue(returnUID , forKey: "uid")
                DataService.ref.userRef.childByAppendingPath(returnUID).childByAppendingPath("Display Name").observeSingleEventOfType(.Value, withBlock: { snapshot in
                    let UserDisplayName = snapshot.value as! String
                    NSUserDefaults.standardUserDefaults().setValue(UserDisplayName, forKey: "displayName")
                    self.performSegueWithIdentifier("loginSuccessSegue", sender: sender)

                })

            }
        }
      } else {
        print("error")
        return
      } 
   }