我正在创建一个社交应用,它的一个常见方面是密切关注用户发布的帖子。我使用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有关。这位初学者将非常感谢任何帮助。
答案 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;
除此之外,我还没有测试过你的其余代码。
看起来像你已经看过马克价格课程,制作这个应用程序。 所以我:)