gpt4 book ai didi

swift - URLSession 和 Collectionview 时间

转载 作者:行者123 更新时间:2023-11-28 06:12:46 26 4
gpt4 key购买 nike

我的 CollectionView 有问题:

这里是 viewWillAppear:

    override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

let urlSession = URLSession(configuration: config)

NSLog("Start URLSession")


NSLog("Start Task")
let task = urlSession.dataTask(with: url) { (data, response, error) in
NSLog("task started")

guard let data = data, error == nil else {
print("error: \(String(describing: error))")

//self.collectionView?.addSubview(blurView)
//customActivityIndicatory(self.view)

let alert = UIAlertController(title: "Error", message: "Connection Error", preferredStyle: .actionSheet)
alert.addAction(UIAlertAction(title: "OK", style: .default) { action in
// perhaps use action.title here
})
OperationQueue.main.addOperation {
self.present(alert, animated: false)
}

return
}

do {
guard let jsonData = try? JSONSerialization.jsonObject(with: data, options: []) as! [String:Any] else {
print("jsonError")
return
}
//adressiere Array in JSON Dictionary
self.Devs = jsonData["devices"] as! [[String:AnyObject]]

NSLog("Json parsed")

//Filter Array
self.filteredArray = self.Devs.filter { self.devArray.contains($0["id"] as! String) }


DispatchQueue.main.async {
self.collectionView?.reloadData()

}

}

}

task.resume()

}

我有一个包含设备 ID 的数组:

    let devArray = defaults.mutableArrayValue(forKey: "savedDevs")

所以让我们假设在 devArray 中有 4 个 ID。

我的 numberOfItemsInSection 看起来像这样:

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

return filteredArray.count
}

这里我必须使用 filteredArray.count,因为当我启动应用程序时会发生这种情况:

2017-09-05 16:21:51.411 [62695:2391013] notfirstStart
2017-09-05 16:21:51.437 [62695:2391013] Start URLSession
2017-09-05 16:21:51.453 [62695:2391013] Start Task
sections:
numberOfItemsInSection: 0
2017-09-05 16:21:52.450 [62695:2391109] task started
2017-09-05 16:21:52.462 [62695:2391109] Json parsed
sections:
numberOfItemsInSection: 4

问题是,在 NSLOG“启动任务”之后,调用了 numberOfSections 和 numberOfItemsInSection 的 CollectionView 函数。

此时,URL session 未完成,cellForItemAt 崩溃并显示“Index out of range”

我做错了什么?

最佳答案

在得到响应后,在 viewWillAppear() 中让你的数组 self.Devs = [] 为空并分配它 self.Devs = jsonData["devices"]作为! [[String:AnyObject]] 并调用 reloadData() 方法。

关于swift - URLSession 和 Collectionview 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com