2017-08-28 148 views
1

這是我的數據結構:很多俱樂部,每個俱樂部都有地址。我試圖讓數據庫保持平坦。如何閱讀firebase數據庫

現在我想在表格視圖中加載一些俱樂部信息。當我向下滑動iPhone屏幕時,它會加載下一個俱樂部信息。

enter image description here

這是我的代碼。但它會加載所有俱樂部信息。我怎樣才能加載一些俱樂部,並在用戶向下滑動時加載下一個俱樂部?

func loadClubs() { 

     ref = Database.database().reference() 

     ref.child("club").observe(DataEventType.value, with: { (snapshot) in 
      //print("clubs: \(snapshot)") 
      let array:NSArray = snapshot.children.allObjects as NSArray 
      for obj in array { 
       let snapshot:DataSnapshot = obj as! DataSnapshot 
       if let childSnapshot = snapshot.value as? [String: AnyObject] { 
        if let clubName = childSnapshot["name"] as? String { 
         print(clubName) 
        } 
       } 
      } 
     }) 

    } 

回答

0

我認爲正確的方式提及元素, 的陣列中,並使變量指數

var i = 0; 
var club = null; 
club = loadClubs(index); // here should return club with specified index; 
         // and increment index in loadClubs func, 
         // also if you need steped back --- and one more 
         // argument to function, for example 
         // loadClubs(index, forward) // where forward is 
         // boolean that says in which way we should 
         // increment or decrement our index 

所以在你的例子是這樣的:

func loadClubs(index, forward) { 

    ref = Database.database().reference() 

    ref.child("club").observe(data => { 
     var club = data[index]; 
     if(forward){ 
     index ++ 
     }else{ 
     index-- 
     } 
    return club; 
    })  
} 
3

火力地堡的查詢支持分頁,但與您以前的習慣略有不同。 Firebase不使用偏移量,而是使用所謂的錨值來確定從何處開始。

獲取項目的第一頁是容易的,你只需指定一個限制項目的數量來獲取:

ref = Database.database().reference() 
    query = ref.child("club").queryOrderedByKey().limitToFirst(10) 

    query.observe(DataEventType.value, with: { (snapshot) in 

現在塊內,保留最後一個項目你」的關鍵的軌跡VE顯示給用戶:

for obj in array { 
     let snapshot:DataSnapshot = obj as! DataSnapshot 
     if let childSnapshot = snapshot.value as? [String: AnyObject] { 
      lastKey = childSnapshot.key 
      if let clubName = childSnapshot["name"] as? String { 
       print(clubName) 
      } 
     } 
    } 

然後獲取下一個頁面,構建開始於你見過的最後一個鍵查詢:

query = ref.child("club").queryOrderedByKey().startAt(lastKey).limitToFirst(11) 

由於在兩個頁面都檢索了錨點項目,因此您需要檢索一個多於頁面大小的項目。