대화방 목록이있는 테이블보기가 있고 각 셀의 모든 멤버의 아바타 컬렉션보기를 얻으려고합니다. 내가 그것을 가지고각 테이블보기 셀에 다른 데이터를로드하는 방법
, 내 기능은 객실의 구성원에 대한 필요한 정보를 얻고 cellForRow
에서 사전에 설정합니다
DispatchQueue.main.async {
self.getParticipantInfo(roomId: self.usersRooms[(indexPath as NSIndexPath).row].id)
existingRoomCell.avatarView.addSubview((self.navCollectionView?.view)!)
}
이것은 중포 기지에서 데이터를 잡아하는 기능입니다
var avatarDictionary = NSMutableDictionary()
var statusDictionary = NSMutableDictionary()
func getParticipantInfo(roomId: String) {
let databaseRef = FIRDatabase.database().reference()
let groupRef = databaseRef.child("groups").child(roomId)
groupRef.observe(.childAdded, with: { snapshot in
if let snapDict = snapshot.value as? [String : AnyObject] {
for each in snapDict {
let uid = each.key
let avatar = each.value["profilePicture"] as! String
let status = each.value["status"] as! String
// Set those to the dictionaries [UID : value]
self.avatarDictionary.setValue(avatar, forKey: uid)
self.statusDictionary.setValue(status, forKey: uid)
DispatchQueue.main.async {
self.navCollectionView?.collectionView?.reloadData()
print("\n\nDone\n\n")
}
}
print("\n\navatarDictionary:\n \(self.avatarDictionary)")
print("\nstatusDictionary:\n \(self.statusDictionary)")
}
})
}
콘솔에 인쇄 된 각 사전 중 5 개가 표시됩니다 (현재 5 개의 회의실이 있음). 각 회의실별로 별도의 사전이있는 것 같습니다. 그러나 어떤 사전이 어느 방에 있는지 지정할 수있는 방법에 대해 고민하고 있으므로 해당 방의 멤버 만 해당 테이블 뷰 셀에 표시됩니다. 예를 들어 컬렉션 뷰의 cellForItem
방법에서
DispatchQueue.main.async {
let avatars = self.roomVC?.avatarDictionary.allValues as! [String]
navBarCell.avatarImageView.loadImageUsingCacheWithUrlString(avatars[indexPath.row])
}
, 나는 방법을 모른다 어떤 사전이 테이블의 어느 방에 있는지 지정합니다. 현재는 단지 하나만 사용합니다. (제 생각에는) avatarDictionary
입니다. 그래서 아바타는 테이블의 한 방에 나타납니다.
컬렉션보기에서 올바른 사전에서 아바타를로드하려면 어떻게해야합니까?
컬렉션보기 클래스는 테이블보기 컨트롤러의 사전을 데이터 소스 : https://pastebin.com/3ft1qS1W 대신 데이터 소스로 사용자 정의 셀을 사용할 것인가? (예 : let avatars = self.customCell? .avatarDictionary.allValues as! [String] self.roomVC? .avatarDictionary.allValues as! [String]') – KingTim
원래 질문을 완전히 이해하지 못할 수도 있습니다. 필자는 각 tableviewcell이 고유 한 비동기 데이터 집합을 표시한다고 가정했습니다. 이게 아니라고 제안하는거야? 사전을 tableviewcontroller의 일부로 사용하는 경우 비동기 데이터를로드 한 후 데이터를 저장 한 다음 올바른 인덱스 경로에서 셀을 다시로드해야합니다. 이것이 올바른 가정이라면 샘플을 모델링 할 수도 있습니다. – dmorrow
맞습니다. 각 tableview 셀은 해당 방의 멤버에 대한 아바타를 표시합니다. 'getParticipants' 함수는'roomID'를 전달 받고 해당 방의 멤버에 대한 아바타와 상태를 가져 와서 사전에 설정합니다. 이것은 내가 잃어버린 곳입니다 - 일단 그 사전이 설정되면 어떻게 프로그램이 Dict A를 셀 A의 데이터 소스로, Dict B를 셀 B의 데이터 소스로 사용 하는지를 알 수있는 방법을 확신하지 못합니다. 에. 귀하의 대답과 함께, 만약 내가 그 기능과 테이블보기 컨트롤러에서 모든 dicts을 제거하고 셀로 이동 해야하는지 잘 모르겠습니다. – KingTim