我目前正在尝试使用Firebase设置好友列表关系,我在为用户添加好友的过程中遇到了一些问题。
我目前有这样的架构:
users
-----
UID
->Name
->Friendslist
->UID of friend:true
userDisplays
------------
-Users Name:Users UID
addedFriends
------------
-UID of added user
->UID Of user that did the adding
我添加朋友的想法是使用用户的名称并在userDisplays
树中查找它,该查找似乎每次都有效。但是,当我尝试从userDisplays
中的子节点读取uid值时,它有时会返回NULL,或者在找到uid值后将完全跳过添加(我的意思是它不会将uid添加到添加用户而不是创建addedFriends
子项。
同样的问题是,当添加用户成功添加所需用户并创建了addedFriends
子节点链接两者时,但再次添加的用户检查最近添加时,并且可以选择“添加”它将返回NULL或跳过删除addedFriends
子项,并且不将uid添加到用户的朋友列表中。
我试图复制文档中找到的关系示例,但是我对我丢失的东西感到困惑,或者这是否是预期的行为?
这是我创建两个用户后的结构。在创建好友列表之前。
{
"userDisplays" : {
"a" : "fed7738e-7dec-4ff3-9cc9-46dee3c189e6",
"t" : "c3b27833-d56b-40e9-b46f-c99128193f3d"
},
"users" : {
"c3b27833-d56b-40e9-b46f-c99128193f3d" : {
"displayName" : "t",
"email" : "test@test.com",
"provider" : "password"
},
"fed7738e-7dec-4ff3-9cc9-46dee3c189e6" : {
"displayName" : "a",
"email" : "test2@test.com",
"provider" : "password"
}
}
}
这是我用来执行添加给定用户名的朋友的快速代码:
ref.userDisplayBaseSingleton.childByAppendingPath("/\(userName)").observeSingleEventOfType(.Value, withBlock: { snapshot in
if snapshot.value is NSNull{
print("null")
}else{
print(snapshot.value)
print("found val")
ref.userBaseSingleton.childByAppendingPath(snapshot.value as! String).observeSingleEventOfType(.Value, withBlock: { (snap) in
let friendData = [
snap.key:true
]
ref.userBaseSingleton.childByAppendingPath("\(currentUser!.id!)/friends").updateChildValues(friendData)
let currentAddData = [
snap.key:currentUser!.id!
]
let friendAddRef = ref.addBaseSingleton.childByAutoId()
friendAddRef.setValue(currentAddData)
})
}
})
基本上我从这个片段中遇到的问题是,有时从userDisplays查找不会返回值,或者如果它没有添加addedFriends
节点。我在重新尝试重新添加用户名时遇到了一个错误,但它实际上会生成users
的新uid,然后生成一个新的addedFriends
子项。
例如,如果我是用户t
并且我尝试添加a
,则可能会发生一些行为。
a
的userDisplay返回null
a
并返回uid
,但未生成addedFriends
节点a
已正确添加,并生成addedFriends
节点,但是当user a
收到添加通知时,可以选择添加t
似乎重现同样的错误。uid
的实际t
将在firebase上更新,然后添加就会成功。我这意味着uid
分配给t
的初始}
{
"addedFriends" : {
"-KH6pR5TV7vjVeADc7mc" : {
"22a3c5fa-e578-4ada-b3c1-355add80041e" : "098804cd-1ffa-4508-b353-6f6a4377661f"
}
},
"userDisplays" : {
"test" : "f0bb77a9-8156-4d44-ad74-6d6b01765802",
"test2" : "098804cd-1ffa-4508-b353-6f6a4377661f"
},
"users" : {
"098804cd-1ffa-4508-b353-6f6a4377661f" : {
"displayName" : "test2",
"email" : "test2@test.com",
"friends" : {
"22a3c5fa-e578-4ada-b3c1-355add80041e" : true
},
"provider" : "password"
},
"f0bb77a9-8156-4d44-ad74-6d6b01765802" : {
"displayName" : "test",
"email" : "test@test.com",
"provider" : "password"
}
}
}
会发生变化,然后我注意到上面的代码会有效。我还假设其更新的原因与发生的错误有关,但我可能是错的。下面是发生错误的片段
{{1}}