2016-08-27 17 views
1

Firebaseからデータを取得するtableviewを実装しています。私のテーブルビューはFirebaseのエントリに動的に依存するセクションに分割され、viewdidloadでデータを取得するとアプリケーションがクラッシュします。Swift + Firebase didFinishLaunchingWithOptionsのデータを事前に読み込みます。

viewdidloadの前にdidFinishLaunchingWithOptionsのFirebaseからデータを取得するにはどうすればよいですか?このテーブルビューは私の最初のView Controllerです。

テーブルビューコントローラで
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    FIRApp.configure() 
    return true 
} 

//

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

の時点で、あなたのデータを持っています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 }) 

に次のコードを移動する必要があり、あなたがロードの道を貼り付けることができますあなたのデータはここにありますか? – renjithr

答えて

0

[OK]を、あなたはグローバル変数のために行くことができます。 MyTableViewControllerの変数 "dates"を宣言する代わりに、グローバル変数として宣言することができます。

public var dates: [(String)] = []

コードは今

任意のクラスのスコープ外であるあなたがviewDidLoad

+0

@rejithrそれは動作しません。上記のコードをdidFinishLaunchingWithOptionsに置き、グローバル変数として日付を宣言しましたが、Firebaseは引き続きviewDidLoadの後にコードを呼び出します。 –

+0

[OK]をクリックします。コールバックが遅れている可能性があります。これで問題が解決しない場合は、データを取得した後にtableview.reload()を呼び出します。空白の画面またはアクティビティインジケータを表示することができます。ちょうど私は私のコードと同じを試みた、私はviewdidLoadの前に応答を得ています – renjithr

関連する問題