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