数据异步加载而不是在UITabBarController TableView中显示?

时间:2015-04-11 02:07:55

标签: ios uitableview swift asynchronous firebase

我的应用程序是一个UITabBarController应用程序,当它第一次开始时,它需要调用我的Firebase数据库,以便我可以在其中一个选项卡中填充UITableView UITabBarController。但是,我注意到我第一次登录并转到TabBarController时,数据没有显示。我必须从该选项卡转到另一个选项卡,然后返回到原始选项卡以显示数据。但是,我想要它,以便第一次显示数据。我理解这是一个错误,因为Firebase异步地抓取数据,并且在处理完所有数据之前加载了视图,但我似乎无法让它按照需要运行。

我尝试在执行segue之前首先查询我们想要的所有值,将它们存储到一个数组中,然后将该数组发送到OffersView中的预定义数组,但这似乎不起作用。这是我的尝试:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "OffersView"){
      let barViewControllers = segue.destinationViewController as UITabBarController
        let navigationOfferController = barViewControllers.viewControllers![0] as UINavigationController
        let offersViewController = navigationOfferController.topViewController as OffersView
        offersViewController.offers = offersQuery()
    }

func offersQuery() -> [Offer]{

    firebaseRef = Firebase(url:"https://OffersDB.firebaseio.com/offers")

    //Read the data at our posts reference
    firebaseRef.observeEventType(FEventType.ChildAdded, withBlock: { (snapshot) -> Void in

        let restaurant = snapshot.value["restaurant"] as? String


        let offer = Offer(restaurant: restaurant)

        //Maintain array of offers
        self.offers.append(offer)
        }) { (error) -> Void in
            println(error.description)
    }
    return offers
}

非常感谢任何帮助!

编辑:我每次发生childAdded调用时都试图使用完成处理程序,我试图这样做,但我似乎无法让它工作。我收到错误消息:'NSInternalInconsistencyException', reason: 'attempt to insert row 1 into section 0, but there are only 1 rows in section 0 after the update

setupOffers { (result) -> Void in
        if(result == true){
            var row = self.offers.count
            self.tableView.beginUpdates()
            var indexPaths = NSIndexPath(forRow: row, inSection: 0)
            println(indexPaths)
            self.tableView.insertRowsAtIndexPaths([indexPaths], withRowAnimation: UITableViewRowAnimation.Bottom)
        }
    }

1 个答案:

答案 0 :(得分:2)

您应该正常进行segue,并在UITableViewController内执行查询。调用查询回调后,您可以继续使用-reloadData重新加载表,以便填充单元格。