2017-11-23 10 views
0

배열에있는 포스트 키에 대해서만 게시물을 가져오고 싶습니다. 나는 아래의 코드와 그것의 변형을 시도했지만 작동하지 않는다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?배열별로 Firebase 데이터 가져 오기

func fetchData(){ 

    DataService.ds.REF_POSTS.queryEqual(toValue: postKeys[IndexPath]).observeSingleEvent(of: .value, with: { (snapshot) in 
     if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{ 
      for snap in snapshot { 
       print("SNAP: \(snap)") 
       if let postDict = snap.value as? Dictionary<String, Any>{ 
        let key = snap.key 
        let post = Post.init(postKey: key, postData: postDict) 
        self.posts.append(post) 
        print("USERPST: \(self.posts)") 
       } 
      } 
     } 
     self.posts.reverse() 
     self.tableView.reloadData() 
    }) 
} 
+0

'postKeys [IndexPath]'의 값은 무엇인가요? 하드 코딩 된 값으로 대체 할 때 문제를 재현 할 수 있습니까? –

+0

postKeys [IndexPath]의 값은 문자열 배열입니다 (포스트 키를 포함합니다). 하드 코딩 된 배열에서는 작동하지 않지만 DataService.ds.REF_POSTS에서 모든 게시물을 가져 오는 것이 좋습니다. 여기서 문제는 배열의 특정 키의 특정 게시물 만 필요하다는 것입니다. – user1234567890

+0

ID 목록을 Firebase에 전달하고 해당 ID의 항목을 검색하는 방법은 없습니다. https://stackoverflow.com/questions/29560088/firebase-equivalent-to-sql-where-in –

답변

0

내 코드가 약간 벗어났습니다. 알아 냈어 :

func fetchData(){ 
    DataService.ds.REF_POSTS.observeSingleEvent(of: .value, with: { (snapshot) in 
     for key in self.postKeys{ 
      if let postDict = snapshot.childSnapshot(forPath: key).value as? Dictionary<String, Any>{ 
       print("SNAP: \(postDict)") 
        let post = Post.init(postKey: key, postData: postDict) 
        self.posts.append(post) 
       } 
     self.posts.reverse() 
     self.tableView.reloadData() 
     } 
    }) 

} 
+0

이 코드는'REF_POSTS'에서 ** 모든 데이터 **를 다운로드 한 다음 클라이언트 쪽을 필터링합니다. 이렇게하면 필요한 것보다 많은 대역폭이 사용됩니다. –

+0

의견이 있으십니까? – user1234567890

+0

모든 ID가 범위 내에 있으면 범위 필터 (예 : queryStartingAtValue() 및 queryEndingAtValue())를 사용할 수 있습니다. 하지만 각 항목을 별도로로드해야 할 가능성이 큽니다. 코드 집약적이지만, Firebase가 요청을 파이프 라인으로 생각하기 때문에 생각만큼 느리지는 않습니다. http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786 –

관련 문제