我有一段代码
@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 :)必须为非空字符串,且不包含'。'。 '#''$''['或']''
答案 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)
另一种简便的方法,如果您从存在click事件的同一个viewController中启动了另一个ViewController,则您必须具有该viewController的引用。那你只需要打电话
vc.yourMethod(params);