无法在Firebase中保留“用户”的“帖子”参考

时间:2016-05-04 08:44:16

标签: ios iphone swift firebase

我正在创建一个社交应用,它的一个常见方面是密切关注用户发布的帖子。我使用Firebase作为后端,这是我的架构

SocialApp
 posts
   -KGsBG5TPYBtzRivZnbf

   users
     facebook:10154108240254134
      cachedProfile
      displayName: "Karthik Kannan"
      imageURL: "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100..."
      posts
         -KGsBG5TPYBtzRivZnbf: true
      provider: "facebook"

当我继续从一个设备(或模拟器)添加帖子时,这按计划工作但是当我从设备中删除应用程序并重新安装时,用户词典中的帖子关系消失。我希望它能够在设备之间保持不变并保持关系完好无损,因此如果用户决定使用其他iDevice登录他的帖子,则不会成为孤儿。
这是我为Firebase添加帖子时编写的代码,以及我目前如何跟踪用户。

func postToFirebase(imgUrl: String) {
    var gift: Dictionary<String, AnyObject> = [
        "giftName": giftName.text!,
        "giftDescription":giftDescription.text!,
        "giftAvailableAt": giftAvailableAt.text!,
        "giftPrice": Int(giftPrice.text!)!,
        "username": NSUserDefaults.standardUserDefaults().valueForKey("uid")!,
        "giftImage":imgUrl,
    ]

    let firebasePost = DataService.ds.REF_POSTS.childByAutoId()
    firebasePost.setValue(gift)

    firebasePost.observeSingleEventOfType(.Value, withBlock: { snapshot in
        if let postID = snapshot.key {
            DataService.ds.REF_USER_CURRENT.childByAppendingPath("posts").childByAppendingPath(postID).setValue(true)
        }

    })
    }

这是我设置当前用户的方式:

var REF_USER_CURRENT:Firebase {
    if let uid = NSUserDefaults.standardUserDefaults().valueForKey("uid") as? String {

        let user = Firebase(url:"\(BASE_URL)").childByAppendingPath("users").childByAppendingPath(did){
           return user!
        } else {
            return Firebase()
        }
    }

    func createFirebaseUser(uid:String, user:Dictionary<String, AnyObject>) {

        REF_USERS.childByAppendingPath(uid).setValue(user)
    }

这是我的登录控制器中的代码。

       NSUserDefaults.standardUserDefaults().setValue(authData.uid, forKey: "uid")

       let user = ["provider":authData.provider!,"displayName":authData.providerData["displayName"]!,"cachedProfile":authData.providerData["cachedUserProfile"]!, "imageURL":authData.providerData["profileImageURL"]!]

       DataService.ds.createFirebaseUser(authData.uid, user: user)

       self.performSegueWithIdentifier("loggedIn", sender: nil)

这是我写的所有代码。我怀疑它与NSUserDefaults有关。这位初学者将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

检查您的代码。我在这里发现了一个错字:

  

var REF_USER_CURRENT:Firebase {       如果让uid = NSUserDefaults.standardUserDefaults()。valueForKey(&#34; uid&#34;)为?字符串{

    let user = Firebase(url:"\(BASE_URL)").childByAppendingPath("users").childByAppendingPath(did){
       return user!
    } else {
        return Firebase()
    }
}

而不是&#34; ... childByAppendingPath(did)&#34; 你可能想要改变&#34;做过&#34;到&#34; uid&#34;

除此之外,我还没有测试过你的其余代码。

看起来像你已经看过马克价格课程,制作这个应用程序。 所以我:)