我正在创建一个应用程序并使用 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/