Firebase observeSingleEvent未触发

时间:2017-08-10 07:31:00

标签: ios json swift database firebase

我在从数据库中检索值时遇到问题。每当我运行包含“observeSingleEvent”函数的方法时,它就会完全跳过该方法。

我已经三次检查了我的路径。我有一步,“用户”,这不是硬编码,并认为那里可能出错了。我硬编码了 - 块仍然被完全跳过。

这是我的功能:

func retrieveAppState() -> String {
    var appState = ""

    let user = makeFirebaseString(with: UserDefaults.standard.string(forKey: "User")!)

    let userInfoRef = ref.child("users").child(user).child("user-info")

    userInfoRef.observeSingleEvent(of: .value, with: { (snapshot) in

        let userInfo = snapshot.value as! [String: Any]

        let state = userInfo["appState"] as! String

        print("App state is: \(state)")

        appState = state


    })

    return appState
}

我尝试了很多不同的变体,例如非常常见的可选绑定。

func retrieveAppState() -> String {
    var appState = ""

    let user = makeFirebaseString(with: UserDefaults.standard.string(forKey: "User")!)

    let userInfoRef = ref.child("users").child(user).child("user-info")

    userInfoRef.observeSingleEvent(of: .value, with: { (snapshot) in

        let userInfo = snapshot.value as! [String: Any]

         if let state = userInfo["appState"] as! String {
             appState = state
         }

    })

    return appState
}

该块永远不会被执行。我尝试过使用snapshot.exist()而没有尝试。它从observeSingleEvent行跳转并直接返回到return语句。我知道该函数被调用,我知道ref是正确的,因为它与我在将值写入数据库时​​使用的相同。

非常感谢任何帮助。我在下面发布了我的JSON结构。这些只是占位符。

{
  "users" : {
    "Mach" : {
      "user-info" : {
        "appState" : "Training",
        "name" : "mattsh"
      }
    },
    "Mat-XXX@gmail-com" : {
      "user-info" : {
        "appState" : "Training",
        "name" : "Mat XXX"
      }
    }
  }
}

编辑:我在数据库中的规则现在每个人都可以读取和写入数据库,即不需要进行身份验证。 iOS中是否有任何内容阻止此操作,因此我可能需要在应用程序中设置一些内容以获取不安全的HTTP请求的权限?

0 个答案:

没有答案