应该在哪里调用collectionView.reloadData()?

时间:2016-09-09 02:23:30

标签: ios reloaddata collectionview

我正在尝试创建一个壁纸应用程序,当我在ViewController文件中完成整个实现时,我的代码工作正常。然后我将一些代码转移到另一个类。这是代码。

ViewController.swift

ItemClickEventArgs

PhotoOperations.swift

private void AdaptiveGV_ItemClick(object sender, ItemClickEventArgs e)
{
    var item = e.ClickedItem as Images;
    var index = ImageCollection.IndexOf(item);
}

如何在ViewController中重新加载数据?我尝试将collectionView参数添加到override func viewDidLoad() { super.viewDidLoad() photoOperations.getStuffFromJson() } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return photoOperations.previewUrlArray.count } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CollectionViewCell cell.backgroundColor = UIColor.whiteColor() if let img = self.images[indexPath] { cell.imageView.image = img } else { photoOperations.downloadThumbnail(indexPath.row){ (image) in dispatch_async(dispatch_get_main_queue()) { if let img = image { cell.imageView.image = img self.images[indexPath] = img } else { print("Images will be loaded in a few seconds!") } } } } return cell } 方法并在最后调用collectionView.reload。但这并不奏效。我在func getStuffFromJson( ){ Alamofire.request(.GET, "https://example.com/api/", parameters: ["key": "123.."]) .responseJSON{ response in if let value = response.result.value { let hits = JSON(value)["hits"] var counter = 0 while counter < hits.count { if let previewString = hits[counter]["previewURL"].rawString(){ self.previewURL = NSURL(string: previewString)! self.previewUrlArray.append(self.previewURL!) counter += 1 } else{ print("Error : A previewURL wasn't found.") }}}}} func downloadThumbnail(forIndexPathAtRow : Int , completion: (UIImage?)->Void) { if previewUrlArray.count > 0 { ... // create URL task , session etc. } } 方法中得到getStuffFromJSON为0。

1 个答案:

答案 0 :(得分:0)

您是否尝试将图片从dispatch_asyncreloadData()方法设置为dispatch_async

我开发了与Alamofire Pod一起使用的基本类似应用。

在使用的download / fetch函数中,设置比我reloadData()

中名为tableView的调度块更有效。

有一个区别,我与tableView合作,您的应用与collectionView一起使用

dispatch_async(dispatch_get_main_queue(), {
            self.tableView.reloadData();
 })

我应用的一小部分

//用户参考

let user : User = User()

//词典,包含json数据

user.setValuesForKeysWithDictionary(dictionary);
  

tableView适用于用户String数组。在dispatch_async之前   将用户附加到它然后在异步

中调用reloadData()

然后

self.users.append(user);
dispatch_async(dispatch_get_main_queue(), {
        self.tableView.reloadData();
})