我正在尝试创建一个壁纸应用程序,当我在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。
答案 0 :(得分:0)
您是否尝试将图片从dispatch_async
和reloadData()
方法设置为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();
})