Ios 异步加载数据且不在UITabBarController表格视图中显示?

Ios 异步加载数据且不在UITabBarController表格视图中显示?,ios,uitableview,swift,asynchronous,firebase,Ios,Uitableview,Swift,Asynchronous,Firebase,我的应用程序是一个UITabBarController应用程序,当它第一次启动时,需要调用我的Firebase数据库,以便我可以在UITabBarController中的一个选项卡内填充UITableView。但是,我注意到,第一次登录并转到TabBarController,数据没有显示。我必须从该选项卡转到另一个选项卡,然后返回到原始选项卡以显示数据。但是,我希望它能够在第一时间显示数据。我理解这是一个错误,因为Firebase异步获取数据,并且在处理所有数据之前加载视图,但我似乎无法使其按预

我的应用程序是一个
UITabBarController
应用程序,当它第一次启动时,需要调用我的
Firebase
数据库,以便我可以在
UITabBarController
中的一个选项卡内填充
UITableView
。但是,我注意到,第一次登录并转到
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调用发生时,我都会尝试使用一个完成处理程序,我试图这样做,但我似乎无法让它工作。我收到一个错误,原因是:
'nsinternalinconsistenceexception',尝试将行1插入节0,但更新后节0中只有1行

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)
        }
    }

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

我如何知道查询回调何时成功完成?这就是我正在努力解决的问题。另外,我没有使用UITableViewController,我只是使用TableView(不确定是否会发生任何变化)。您可以做的是,或者每次调用FEventType.ChildAdded时,您都希望在更新模型后对TableView执行
-insertRowsAtIndexPaths:withRowAnimation:
。这样,您的产品就可以一个接一个地顺利加载到tableView中,而无需使用完成处理程序进行批处理更新。我会尝试一个实现,如果我不能让它工作,我会给你回复。我想知道,你能给我一些关于如何使用完成处理程序进行批量更新的提示吗?我对Swift有点陌生,所以我不知道这需要什么。另外,我们如何知道FEventType.ChildAdded何时完成呼叫?就在函数声明的末尾?是否将对象添加到模型中(即对象数组)?您似乎调用了该方法,但
-tableView:numberofrowsinssection:
仍返回旧的金额(因此添加失败)