从Firebase中检索数据后,如何将检索到的数据从一个视图控制器发送到另一个视图控制器?

这是我在Firebase中创build的表格。 我有一个searchbutton。 button动作将首先从firebase中获取数据,然后将其发送到另一个视图控制器,并将显示在一个表视图。 但主要问题是在从Firebase获取所有数据之前

self.performSegueWithIdentifier("SearchResultPage", sender: self ) 

触发器和我的下一个视图控制器显示一个空的表视图。 这里是我的努力。

从这里我觉得我的代码放置不好。

在完成for循环之后,在if块中将这行代码写入dataTransfer方法中

 self.performSegueWithIdentifier("SearchResultPage", sender: self ) 

尝试在执行search时发送searchstring作为发件人,例如:

 self.performSegueWithIdentifier("SearchResultPage", sender: "searchString") 

然后,在准备segue时,获取目标视图控制器并将string发送到新的视图控制器。 就像是:

 destinationViewController.searchString = sender as! String 

当segue完成并且你来到新的视图控制器时,你现在应该有一个设置的searchString值,使用这个值来执行你的查询并获取相关的数据在新的表格视图中显示。

请注意,这只是众多解决scheme之一,还有其他方法可以实现。

  • 您无法发送数据的原因是因为您甚至在数据实际上被提取之前就试图发送数据。
  • 只有在获取数据后才能尝试下一个视图控制器

     func dataTransfer() { let BASE_URL_HotelLocation = "https://**************.firebaseio.com/Niloy" let ref = FIRDatabase.database().referenceFromURL(BASE_URL_HotelLocation) ref.queryOrderedByChild("location").queryStartingAtValue("uttara").observeEventType(.Value, withBlock: { snapshot in if let result = snapshot.children.allObjects as? [FIRDataSnapshot] { for child in result { let downloadURL = child.value!["image"] as! String; self.storage.referenceForURL(downloadURL).dataWithMaxSize(25 * 1024 * 1024, completion: { (data, error) -> Void in let downloadImage = UIImage(data: data!) let h = Hotel() h.name = child.value!["name"] as! String print("Object \(count) : ",h.name) h.deal = child.value!["deal"] as! String h.description = child.value!["description"] as! String h.distance = child.value!["distance"] as! String h.latestBooking = child.value!["latestBooking"] as! String h.location = child.value!["location"] as! String h.image = downloadImage! self.HotelObjectArray.append(h) }) } let storyboard = UIStoryboard(name:"yourStoryboardName", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("SearchResultPageIdentifier") as! SearchResultPage self.navigationController.pushViewController(vc, animated: true) } else { print("no results") } }) 

    }