2016-08-27 16 views
1

Firebase에서 데이터를 가져 오는 tableview를 구현하고 있습니다. 내 tableview는 Firebase의 항목에 동적으로 종속되는 섹션으로 나뉘며 viewdidload에서 데이터를 검색하면 앱이 다운됩니다.Swift + Firebase didFinishLaunchingWithOptions의 데이터를 미리로드하십시오.

viewdidload하기 전에 didFinishLaunchingWithOptions에서 Firebase의 데이터를 가져 오는 방법은 무엇입니까? 이 테이블 뷰는 내 첫 번째 뷰 컨트롤러입니다.

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

당신이로드하는 방식을 붙여 넣을 수 있습니다 viewDidLoad의 시간에 데이터를해야합니다 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

확인있는 tableview 컨트롤러에서

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    FIRApp.configure() 
    return true 
} 

// 당신은 글로벌 변수에 갈 수 있습니다. MyTableViewController 안에 변수 "dates"를 선언하는 대신 전역 변수로 선언 할 수 있습니다.

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

코드는 모든 클래스의 범위 밖에서해야

지금 당신은

+0

@rejithr 그래도 작동하지 않습니다. 위 코드를 didFinishLaunchingWithOptions에두고 전역 변수로 날짜를 선언했지만 Firebase은 여전히 ​​viewDidLoad 다음에 코드를 호출합니다. –

+0

좋습니다. 이상적으로는 안됩니다. 콜백이 지연 될 수 있습니다. 이 방법으로 문제가 해결되지 않으면 데이터를 얻은 후에 tableview.reload()를 호출하십시오. 빈 화면이나 활동 표시기를 표시 할 수 있습니다. 지금 막 내 코드와 동일한 시도, viewdidLoad 전에 응답을 받고있다. – renjithr

관련 문제