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

时间:2016-11-07 03:56:14

标签: ios swift firebase swift2 firebase-realtime-database

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

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

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

从这篇文章here我认为我的代码放置不好。

3 个答案:

答案 0 :(得分:1)

在完成for循环

之后的if block中的dataTransfer方法中写下这行代码
self.performSegueWithIdentifier("SearchResultPage", sender: self )

答案 1 :(得分:0)

尝试在执行segue时将搜索字符串作为发件人发送,例如:

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

然后,在准备segue时,获取目标视图控制器并将字符串发送到新的视图控制器。类似的东西:

destinationViewController.searchString = sender as! String

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

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

答案 2 :(得分:0)

  • 您无法发送数据的原因是,您甚至在实际获取数据之前尝试发送数据。
  • 在获取数据

    后,请尝试以下操作,以便进入下一个视图控制器
    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")
        }
    
        })
    

    }