繁体   English   中英

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

[英]Unable to persist 'posts' reference for 'users' in 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有关。 初学者将不胜感激任何帮助。

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

var REF_USER_CURRENT:Firebase {如果让uid = NSUserDefaults.standardUserDefaults()。valueForKey(“ uid”)设为? 字符串{

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

代替“ ... childByAppendingPath(did)”,您可能希望将“ did”更改为“ uid”

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

好像您已经观看了Mark Price课程,并制作了此应用。 我也有 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM