数据parsing后重新加载UICollection视图

我正在尝试dynamic更新一个uicollectionview。 我用这个惊人的教程如何创build一个简单的uicollection。

它使用静态数组的项目时效果很好。 我的问题 – 我想有一个uicollection填充数据从我的数据库parsing成一个新的数组。 我不知道如何重新加载parsing我的JSON数据后的uicollection。

更新的代码与答案:

import UIKit class Books: UIViewController, UICollectionViewDelegate { @IBOutlet weak var bookscollection: UICollectionView! var user_id: Int = 0; //------------ init ---------------// override func viewDidLoad() { super.viewDidLoad() } override func viewDidAppear(_ animated: Bool) { showtutorial() getuserid() } //------------ show books ---------------// var booknames = [String]() var bookcolor = [String]() var bookdescription = [String]() var bookid = [Int]() func posttoapi(){ //show loading LoadingOverlay.shared.showOverlay(view: self.view) //send let url:URL = URL(string: "http://www.url.com")! let session = URLSession.shared var request = URLRequest(url: url) request.httpMethod = "POST" request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData let paramString = "user_id=\(user_id)" request.httpBody = paramString.data(using: String.Encoding.utf8) let task = session.dataTask(with: request as URLRequest) {(data, response, error) in //hide loading LoadingOverlay.shared.hideOverlayView() //no response guard let data = data, let _:URLResponse = response, error == nil else { print("response error") return } //response, parse and send to build let json = String(data: data, encoding: String.Encoding.utf8); if let data = json?.data(using: String.Encoding.utf8){ let json = try! JSON(data: data) for item in json["rows"].arrayValue { //push data to arrays self.booknames.append(item["name"].stringValue) self.bookcolor.append(item["color"].stringValue) self.bookdescription.append(item["description"].stringValue) self.bookid.append(item["id"].int!) //reload uicollection DispatchQueue.main.sync(execute: { self. bookscollection.reloadData() }) } } } task.resume() } //------------ collection -------------// func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { print("collection view code called") return self.booknames.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = bookscollection.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! BooksCell cell.myLabel.text = self.booknames[indexPath.item] cell.backgroundColor = UIColor.cyan // make cell more visible in our example project return cell } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { print("You selected cell #\(indexPath.item)!") } //------------ end ---------------// override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

感谢您的任何帮助!

同样的问题,我面对..你的url有很多图像意味着重新加载吨

 dispatch_async(dispatch_get_main_queue(), { self.collectionView.reloadData() })