我正在实施一个从Firebase中提取数据的tableview。我的tableview分为动态依赖于Firebase中的条目的部分,并且在viewdidload中检索数据会使应用程序崩溃。
如何在viewdidload之前从didFinishLaunchingWithOptions中的Firebase中提取数据?这个tableview是我的第一个视图控制器。
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
}
答案 0 :(得分:0)
好的,你可以选择全局变量。而不是声明变量" date"在MyTableViewController
内,您可以将其声明为全局变量。
public var dates: [(String)] = []
。
代码应该在任何类的范围之外
现在将以下代码移至func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [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
})
您将在viewDidLoad