如何将变量从按钮Action函数拉到另一个视图控制器类?

时间:2019-04-15 05:30:21

标签: swift firebase

我有一段代码

@IBAction func postbutton(_ sender: UIButton) {
   let ref: DatabaseReference = Database.database().reference()
   let postvalue =  ref.child("All Post").childByAutoId()
   let postkeyvalue = postvalue.key!
   postvalue.child("Post Content").setValue(postcontent.text)
   postvalue.child("Post Author").setValue(currentuser)
   var possstkeystring = postkeyvalue
}

我需要访问其他视图控制器文件中的possstkeystring。

我已经尝试过在函数外部声明possstkeystring。当我这样做时,我的项目总是会失败,因为它是空的。

我尝试使用无法使用的prepare函数。

我试图在类外部声明变量,但是没有用。 它总是失败,因为该字符串为空,并且由于它是Firebase子字符串,因此不能为空。

这是我试图将其插入的其他文件代码段

self.ref.child("All Post").child(possstkeystring).child("Post Author").observe(DataEventType.value, with: { (snapshot) in
     if let item = snapshot.value as? NSDictionary
       { 
          self.authornamereference = item["Post Author"] as! String
       }

请帮助!谢谢:)

当我实际在范围之外或静态变量中输入变量时,出现此错误

由于未捕获的异常'InvalidPathValidation',正在终止应用程序,原因:'((child :)必须为非空字符串,且不包含'。'。 '#''$''['或']''

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式进行操作,其中一种方式是使用NotificationCenter

使用NotificationCenter:

首先,您需要在App的任何位置向Notification.Name添加扩展名。喜欢

extension Notification.Name { static let mynotification = Notification.Name("mynotification") }

在您的另一个View控制器中的viewDidLoad方法中添加

NotificationCenter.default.addObserver(self, selector: #selector(yourMethod), name: NSNotification.Name.mynotification, object: nil)

然后在您的另一个ViewController中添加一个方法,该方法将在触发通知时被调用

 func yourMethod(){
    //// do something
 }

现在,在您的Click事件方法中,甚至在应用程序中的任何位置,您都可以通过发送类似通知来调用viewController的方法

 NotificationCenter.default.post(name: NSNotification.Name.mynotification, object: nil)
  1. 另一种简便的方法,如果您从存在click事件的同一个viewController中启动了另一个ViewController,则您必须具有该viewController的引用。那你只需要打电话

    vc.yourMethod(params);