我有一个 api 调用,我将在其中获取所有名称,并将附加到一个 var 以显示在我的 Collection View 标签中。但值不会附加到我的 var。
这里代码:
var mobkam = [String]()
override func viewDidLoad() {
super.viewDidLoad()
self.getallLoans()
}
func getallLoans(){
Manager.sharedInstance.getallLoans { (data, err) in
if let _ = err{
}else{
if let dataa = data as? String{
if let dataFromString = dataa.data(using: String.Encoding.utf8, allowLossyConversion: false) {
let json = JSON(data: dataFromString)
print(json) // correctly display all names like ["1","2", etc]
self.mobileOprator.removeAll()
for (_, val) in json {
print(val.rawString()) // displaying the correct each items names
self.mobkam.append(val.rawString()!)
}
}
}
}
}
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.mobkam.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! NameCollectionViewCell
cell.NameLabel.text = self.mobkam[indexPath.item]
return cell
}
我做错了什么?无法解决。我遗漏了什么。请帮助我。
谢谢!
最佳答案
在 getallLoans
中加载所有值后,您只需调用 collectionView.reloadData()
。
当您进行 API 调用时,这是一个异步任务,需要一点时间才能完成。您的 Collection View 将已经加载了它的数据源,因此您需要通知它数据已更改。然后它将再次调用 CollectionViewDataSource 委托(delegate)方法并根据更新后的数据刷新 View 。
for (_, val) in json {
print(val.rawString()) // displaying the correct each items names
self.mobkam.append(val.rawString()!)
}
collectionView.reloadData()
关于ios - 无法附加值并在 Collection View 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46974017/