我有一个NSObject数组,我需要在另一个viewcontroller中读取。但是,我不确定应该为它设置数据的级别。
以下屏幕截图最能说明我尝试做的事情。每个HomeController都有一个标题,成员列表,描述和插入集合视图(黄色条)。我需要集合视图的单元格数量等于成员数量。
我尝试使用lazy var在inset集合视图中创建对HomeController的引用,但是得到了错误:
fatal error: Index out of range
lazy var homeController: HomeController = {
let hc = HomeController()
hc.liveCell = self
return hc
}()
同样,这是从插图集合视图
中完成的func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath :
IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: profileImageCellId, for: indexPath) as! profileImageCell
let room = homeController.rooms[indexPath.row]
print(room.members?.count)
return cell
}
有什么建议吗?
修改
使用此函数将数据添加到数组
var rooms = [Room]()
func fetchAllRooms(){
Database.database().reference().child("rooms").observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let room = Room()
room.rid = snapshot.key
room.setValuesForKeys(dictionary)
self.rooms.append(room)
print(snapshot)
DispatchQueue.main.async(execute: {
self.collectionView?.reloadData()
})
}
print("end of room snap")
}, withCancel: nil)
}
以下是HomeController级别索引路径上项目的单元格
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var cell = UICollectionViewCell()
let section = indexPath.section
let liveCell = collectionView.dequeueReusableCell(withReuseIdentifier: LiveCellId, for: indexPath) as! LiveCell
let cell = liveCell
let room = rooms[indexPath.row]
liveCell.liveStreamNameLabel.text = room.groupChatName
liveCell.descriptionLabel.text = room.groupChatDescription
return cell
}
答案 0 :(得分:0)
您需要检查数组的计数,以防止崩溃Index out of range
if homeController.rooms.count > indexPath.row {
let room = homeController.rooms[indexPath.row]
print(room.members?.count)
}
答案 1 :(得分:0)
你可以调试并分享以下两件事,然后我们可以进一步了解这个