从firebase加载数据取决于登录的用户

时间:2016-04-20 15:25:07

标签: swift firebase firebase-realtime-database

如何将userID输入firebase网址。我目前收到此错误..."使用未解析的标识符"。

我尝试移动"让默认设置:..."和"让用户ID:..."高于"让firebase = Firebase(网址:..)"但后来出现了这个错误......"实例成员'默认'不能在类型TableViewController"。

上使用

我要做的是加载与userID匹配的用户的用户个人资料。

以下相关代码。

let firebase = Firebase(url:"https://<myfirebase>.firebaseio.com/users/\(userID)")
var items = [NSDictionary]()

override func viewDidLoad() {
    super.viewDidLoad()

    let rightItemBtn = UIButton()
    rightItemBtn.backgroundColor = UIColor.whiteColor()
    rightItemBtn.frame = CGRectMake(40, 40, 60, 35)


    let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
    let userID = (defaults.objectForKey("userID") as? String)!

    let labelText = userID

    label.frame = CGRectMake(40, 40, 50, 35)

    label.text = labelText
}

2 个答案:

答案 0 :(得分:0)

您使用userId超出范围,在不存在的位置。 执行类似这样的操作,将firebase保留为可选属性,然后当userId创建一个url,然后使用该URL创建Firebase Object。

let userAPI = "https://<myfirebase>.firebaseio.com/users/"
var firebase : Firebase?
var items = [NSDictionary]()

override func viewDidLoad() {
    super.viewDidLoad()

    let rightItemBtn = UIButton()
    rightItemBtn.backgroundColor = UIColor.whiteColor()
    rightItemBtn.frame = CGRectMake(40, 40, 60, 35)


    let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
    let userID = (defaults.objectForKey("userID") as? String)!

    let url = "\(userAPI)\(userID)"
    firebase =  Firebase(url:url)


    let labelText = userID

    label.frame = CGRectMake(40, 40, 50, 35)

    label.text = labelText
}

答案 1 :(得分:0)

您似乎正在尝试为当前经过身份验证的用户(?)

加载一些用户信息

给出

的结构
users
  uid_0:
   user_name: "Buzz Aldrin"

如果是这样,那就太简单了:

let fb = Firebase(url:"https://<myfirebase>.firebaseio.com")

let uid = fb.authData.uid
let usersRef = fb.childByAppendingPath("users")
let thisUserRef = usersRef.childByAppendingPath(uid)

thisUserRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
      let userName = snapshot.value.objectForKey("user_name") as! String
      print(userName)
})

我不知道NSUserDefaults扮演什么角色,但如果用户通过Firebase身份验证,则应该从authData中检索它。如果没有,并且您已将其存储在NSUserDefaults中,请从那里检索它而不是authData。