2016-10-05 2 views
1

Firebase observeEventType 옵저버를 다시로드하는 것에 관해서 다른 많은 질문을 읽은 후에 꽤 혼란 스럽습니다. 전 관측기 사전을 전체 컨트롤러에서 액세스 할 수있는 변수에 추가하고 있습니다. 그런 다음 해당 값을 데이터 소스 사전에 할당하고 이전에 추가 한 모든 하위를로드합니다.실시간으로 추가 된 Firebase 하위 뷰가 콜렉션 뷰에서 업데이트되지 않음

그러나 다른 시뮬레이터의 새 값을 추가하거나 수동으로 백엔드에 입력하면 전역 사전은 새 값으로 업데이트되지만 데이터 소스 변수는 업데이트되지 않습니다. 컨트롤러를 종료하면 결국 업데이트되지만 파이어베이스 사용 목적을 상실하게됩니다.

공개 관찰자는 viewWillAppear에 있어야한다고 생각하지만 온라인 소스는 viewDidLoad에있는 것으로 보입니다.

세그먼트 화 된 컨트롤을 사용하여 각 사용자 정의 클래스를 검토 중이므로 문제가 될 수 있습니다. 설정은 하나의 콜렉션 뷰 컨트롤러이며 셀은 셀인 사용자 정의 콜렉션 뷰입니다.

 override func viewWillAppear(animated: Bool) { 
      super.viewWillAppear(animated) 
      self.loadFireData() 
     } 

    func loadFireData() { 
    if let locationId = location.locationId { 

     let postQuery = ref.child("Posts").child(selectedRegion).child(locationId).queryOrderedByChild("descTime") 
     postQuery.observeEventType(.ChildAdded, withBlock: { (snap) in 


      if snap.exists() { 
       let postQuery = snap.value! as! [String: AnyObject] 

       let feedPost = FeedModel() 

       feedPost.value = postQuery["value"] as? String 

       feedPost.key = postQuery["key"] as? Int 
       feedPost.balance = postQuery["balance"] as? Double 
       self.post.append(feedPost) 

       dispatch_async(dispatch_get_main_queue(), { 
        self.collectionView!.reloadData() 
       }) 
      } 

      } 

     }) 
    } 

} 

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    if indexPath.section == 1 { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier(feedCellId, forIndexPath: indexPath) as! LocationFeedCell 
     cell.location = location 
     //this doesn't seem to be updating here 
     cell.posts = posts 

     return cell 
    } 

어떤 도움을 크게 할 경우에만 사후 배열에 feetpost를 추가

답변

0

감사합니다. 그래서 다시로드 collectionview 후, 당신은 당신의 정의 셀의 레이블이

if indexPath.section == 1 { 
      let cell = collectionView.dequeueReusableCellWithReuseIdentifier(feedCellId, forIndexPath: indexPath) as! LocationFeedCell 
      cell.location = location 
      //Replace this below line: 
      cell.posts = post[indexpath.row] as! String 

      return cell 
     } 
+0

미안 indexpath.row에 따른에 최신 feetpost를 추가해야합니다, 나는 충분히 이전 분명하지 않다, 그러나 그것은 단지의 핵심 중 하나의 예가 될 예정이었다 게시물 사전의 가치 쌍. 그래서이 코드로 놀기를 기반으로하는 사전에 오직 하나의 값만을 할당하기 때문에 여전히 작동하지 않습니다. – SethG

관련 문제