Swift&x2B;didFinishLaunchingWithOptions中的Firebase预加载数据
我正在实现一个从Firebase提取数据的tableview。我的tableview分为几个部分,这些部分动态地依赖于Firebase中的条目,在viewdidload中检索数据会使应用程序崩溃 如何在查看DidLoad之前使用选项从DidFinishLaunching中的Firebase中提取数据?这个tableview是我的第一个视图控制器Swift&x2B;didFinishLaunchingWithOptions中的Firebase预加载数据,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我正在实现一个从Firebase提取数据的tableview。我的tableview分为几个部分,这些部分动态地依赖于Firebase中的条目,在viewdidload中检索数据会使应用程序崩溃 如何在查看DidLoad之前使用选项从DidFinishLaunching中的Firebase中提取数据?这个tableview是我的第一个视图控制器 func application(application: UIApplication, didFinishLaunchingWithOptions l
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
FIRApp.configure()
return true
}
//在tableview控制器中
class MyTableViewController: UITableViewController {
var ref: FIRDatabaseReference!
private var _refHandle: FIRDatabaseHandle!
var mileageDatabase: [FIRDataSnapshot]! = []
var dates: [(String)] = []
override func viewDidLoad() {
super.viewDidLoad()
print("View did load \(self.dates)")
configureDatabase()
self.tableView = UITableView(frame: self.tableView.frame, style: .Grouped)
}
func configureDatabase() {
ref = FIRDatabase.database().reference()
_refHandle = self.ref.child("mileage").observeEventType(.ChildAdded, withBlock: { (snapshot) in
self.mileageDatabase.append(snapshot)
self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: self.mileageDatabase.count - 1, inSection: 0)].reverse(), withRowAnimation: .Automatic)
})
self.ref.child("mileage").queryOrderedByChild("date").observeEventType(.ChildAdded, withBlock: { (snapshot) in
print(snapshot.value?["date"])
self.dates.append(snapshot.value?["date"] as! String)
// Here I will do some magic to sort out unique dates
})
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return self.dates.count
}
好的,你可以选择全局变量。您可以将其声明为全局变量,而不是在
MyTableViewController
中声明变量“dates”
公共变量日期:[(字符串)]=[]
代码应该在任何类的作用域之外
现在将以下代码移动到func应用程序(应用程序:UIApplication,didfishlaunchingwithoptions启动选项:[NSObject:AnyObject]?)->Bool
ref = FIRDatabase.database().reference()
ref.child("mileage").queryOrderedByChild("date").observeEventType(.ChildAdded, withBlock: { (snapshot) in
print(snapshot.value?["date"])
dates.append(snapshot.value?["date"] as! String)
// Here I will do some magic to sort out unique dates
})
您将在
viewdiload
时获得数据。好的,您可以选择全局变量。您可以将其声明为全局变量,而不是在MyTableViewController
中声明变量“dates”
公共变量日期:[(字符串)]=[]
代码应该在任何类的作用域之外
现在将以下代码移动到func应用程序(应用程序:UIApplication,didfishlaunchingwithoptions启动选项:[NSObject:AnyObject]?)->Bool
ref = FIRDatabase.database().reference()
ref.child("mileage").queryOrderedByChild("date").observeEventType(.ChildAdded, withBlock: { (snapshot) in
print(snapshot.value?["date"])
dates.append(snapshot.value?["date"] as! String)
// Here I will do some magic to sort out unique dates
})
您将在
viewdiload
时拥有数据。您可以在此处粘贴加载数据的方式吗?您可以在此处粘贴加载数据的方式吗?@rejithr但它不起作用。我将上面的代码放置在didFinishLaunchingWithOptions,并将日期声明为全局变量,但Firebase仍然在viewDidLoad之后调用代码。好的,理想情况下不应该这样做。您的回拨可能会延迟。如果这不能解决问题,那么在获取数据后调用tableview.reload()。您可以显示空白屏幕或活动指示器。刚才我用我的代码尝试了同样的方法,我之前得到了响应viewdidLoad@rejithr但它不起作用。我将上面的代码放置在didFinishLaunchingWithOptions,并将日期声明为全局变量,但Firebase仍然在viewDidLoad之后调用代码。好的,理想情况下不应该这样做。您的回拨可能会延迟。如果这不能解决问题,那么在获取数据后调用tableview.reload()。您可以显示空白屏幕或活动指示器。刚才我用我的代码做了同样的尝试,我在viewdidLoad之前得到了响应