ios - 使用在另一个 Swift VC 文件中创建的对象?

标签 ios swift global-variables firebase

我正在创建一个应用程序并使用 Firebase 进行后端和用户身份验证。我在登录屏幕的 View Controller 中完成登录过程。这样做之后,在该 VC 中创建了 authData 对象,并且 authData 对象包含一个 UID(用户 ID)字段。我想在另一个 VC 中引用同一对象的 uid 字段,在其中我通过附加在 FirebaseFramework.m 文件中创建的 myRootRef 变量来更改根数据库 url。本质上,我希望能够在另一个 VC 中使用和引用在一个 VC 中创建的对象。我该怎么做?

在登录VC中:

    @IBAction func LoginTapped(sender: UIButton) {
    var email:NSString = txtEmail.text as NSString
    var password:NSString = txtPassword.text as NSString

    if ( email.isEqualToString("") || password.isEqualToString("") ) {

        var alertView:UIAlertView = UIAlertView()
        alertView.title = "Sign in Failed!"
        alertView.message = "Please enter Email and Password"
        alertView.delegate = self
        alertView.addButtonWithTitle("OK")
        alertView.show()
    } else {

        myRootRef.authUser(email as String, password: password as String){
            error, authData in
            if error != nil {
                var alertView:UIAlertView = UIAlertView()
                alertView.title = "Sign in Failed!"
                alertView.message = "Incorrect email or password"
                alertView.delegate = self
                alertView.addButtonWithTitle("OK")
                alertView.show()
            } else {
              println(authData.uid)

            }
        }
    }

}

在另一个 VC 中:

@IBAction func SubmitTapped(sender: AnyObject) {   

    var UserRef = myRootRef.childByAppendingPath(authData.uid)
    UserRef.setValue(item)

}

在另一个 VC 中,无法识别“authData.uid”,尽管它是在登录 VC 中创建的。

最佳答案

您需要使用segue。您可以在 Storyboard中连接一个 segue,给它一个标识符,然后从代码中触发它。

Ray Wenderlich.com有一篇很棒的文章。

您可以从代码中调用 performSegueWithIdentifier 方法。这将触发一个segue。从那里您可以在 prepareForSegue Controller 方法中“拦截”segue。在此方法中,您可以填充目标 View Controller 的属性。

当用户通过 Firebase 应用程序的身份验证时,authData 属性包含当前用户。使用该属性,您可以填充下一个 View Controller 。

let ref = Firebase(url: "<my-firebase-app>")

@IBAction func loginDidTouch(sender: AnyObject?) {
  ref.authUser("email", "password") { (error, authData) in
    self.performSegueWithIdentifier("MyIdentifier", sender: nil)
  }
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "MyIdentifier" {
    let vc = segue.destinationViewController as! MyNextViewController
    vc.authData = ref.authData
  }
}

关于ios - 使用在另一个 Swift VC 文件中创建的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31439115/

相关文章:

ios - 如何在 swift 中从可加载包创建主类的实例

ios - iOS 的自动布局可以重新排列 UI 小部件吗

iPhone NSUserDefaults 持久化难度

javascript - Var 和 JavaScript 变量作用域

ios - 创建跨类的全局对象

c - C头文件中的全局数组?

ios - 在异步加载中重新加载数据

swift - 如何在 swift 中使用超棒的字体图标?

ios - 在 ScrollView 的 ContentView 中拉伸(stretch) UIView

ios - 使组合直通发布者不那么全局化