我不知道我在做什么错。
我有一个带有collectionView的viewController。
我在viewController和情节提要中设置了collectionView委托,如下所示:
modelosCV.delegate = self
modelosCV.dataSource = self
我已经创建了所有collectionView方法:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return filtrados ? modelosFiltrados.count : modelos.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cellModelos = collectionView.dequeueReusableCell(withReuseIdentifier: "modelo", for: indexPath) as! ModelosCollectionViewCell
print(filtrados ? modelosFiltrados[indexPath.row].icono : modelos[indexPath.row].icono)
let foto_modelo = filtrados ? modelosFiltrados[indexPath.row].icono : modelos[indexPath.row].icono
let modelo_nombre = filtrados ? modelosFiltrados[indexPath.row].nombre : modelos[indexPath.row].nombre
cellModelos.modelo_nombre.text = modelo_nombre
let url = URL(string: "https://j../iconos/"+foto_modelo)
UIImage.loadFrom(url: url!) { image in
cellModelos.modelo_icono.image = image
}
return cellModelos
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let padding: CGFloat = 50
let collectionViewSize = collectionView.frame.size.width - padding
return CGSize(width: collectionViewSize/2, height: 242)
}
我正在从远程JSON源填充collectionView:
func downloadJSONModelos(completed: @escaping () -> ()) {
var categoria = ""
let cat = self.defaults.string(forKey: "nueva_alarma_categoria")
if (cat == "Móviles"){
categoria = "3"
}
if (cat == "Tablets"){
categoria = "5"
}
if (cat == "Smartwatches"){
categoria = "7"
}
let marca_id = self.defaults.string(forKey: "nueva_alarma_marca_id")
let url = URL(string: "https:.....php?marca="+marca_id!+"&cat="+categoria)
URLSession.shared.dataTask(with: url!) { (data,response,error) in
print(data as Any)
print(response as Any)
if error == nil {
do {
self.modelos = try JSONDecoder().decode([Modelos].self, from: data!)
DispatchQueue.main.async {
completed()
}
}catch{
}
print(self.modelos)
}
}.resume()
}
应用程序正在接收输出中打印的JSON数组,但collectionView仍然为空。
我想念什么?
答案 0 :(得分:2)
将此添加到您的viewDidLoad
中:
yourCollectionView.register(UINib(nibName: "yourXibName", bundle: nil), forCellWithReuseIdentifier: "modelo")
在从collectionView
向数组中添加元素的位置,用yourCollectionView.reloadData()
重新加载JSON
。
希望有帮助...