Ich habe versucht, eine Hintergrundbild-App zu erstellen, und mein Code funktionierte einwandfrei, als ich die gesamte Implementierung in der ViewController-Datei hatte. Und dann habe ich einen Teil des Codes in eine andere Klasse verschoben. Hier ist der Code.Wo sollte collectionView.ReloadData() aufgerufen werden?
ViewController.swift
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
}
PhotoOperations.swift
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.
}
}
Wie lade ich die Daten im Viewcontroller? Ich habe versucht, einen collectionView-Parameter der getStuffFromJSON
-Methode hinzufügen und collectionView.Reload am Ende aufrufen. Aber das funktioniert nicht. Auch bekomme ich 0 als previewURLArray.count
in der numberOfItemsInSection
Methode.
Sie sollten einen Abschluss Schließung auf Ihrem 'getStuffFromJson' hinzuzufügen und das Array zurück zum Viewcontroller übergeben, dann gibt es im Innern Nachladen, ich sehe die 'downloadThumbnail' Sie tun es bereits, aber warum nicht für die andere tun? – Tj3n
Es ist mir nicht einmal in den Sinn gekommen. Vielen Dank – 209135
Was ist nicht aufgetreten? Übergeben Sie die TableView nicht an die Funktion, sondern schreiben Sie den Abschluss und lassen Sie den Code an ihn übergeben – Tj3n