2016-07-12 5 views
0

Ich habe Schwierigkeiten, jedes Bild meiner Tableviewcell zu erhalten, um das Thumbnail meines Blogs anzuzeigen. der Link gültig ist, wie ich es auf Bildschirm gedruckt hatte sicherzustellen, dass es funktioniert hier ist der Code-Block mein Gehirn-Aneurysmaswift downloading url und bevölkern uiimageview

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 

    let blogPost: BlogPost = blogPosts[indexPath.row] 
    //cell.textLabel?.text = blogPost.postTitle 
    postImageLink = blogPost.postImageLink 
    cell.textLabel?.text = blogPost.postImageLink 

    if postImageLink != "" && cell.imageView?.image != nil { 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 

      cell.imageView?.image = UIImage(data: NSData(contentsOfURL: NSURL(string:self.postImageLink)!)!) 
     } 
    } else { 
      cell.imageView?.image = UIImage(named: "IMG_0079") 
     } 



    return cell 
} 

verursacht i die Textbezeichnung nur auf postimagelink gesetzt für sie wurde das Parsen den richtigen Code, um sicherzustellen, zukünftige Verwendung. Um das Problem zu lösen, werden die Thumbnails meines Blogs nicht geladen. Nur das voreingestellte Bild, wenn ein Thumbnail nicht vorhanden ist..PostImageLink ist eine eindeutige URL für jedes Thumbnail, das ich analysiert habe. (ja ich weiß, dass ich einen Parser schreiben kann, aber dieses Problem nicht lösen kann = (..) jede Hilfe dankbar ist, bevor ich meinen Laptop vom Dach dank werfen! here is image

-rookieprogrammer

+0

Bitte beachten Sie, dass Sie ein Ansichtselement (in diesem Fall 'imageView') nicht außerhalb der Hauptwarteschlange bearbeiten können. –

+0

Bedeutet das, dass ich eine Image-URL nicht in eine UIImageView in der if-Anweisung herunterladen kann? Der Compiler liest jedes Mal "Null". Vielleicht fehlt mir etwas –

+0

Nein, es bedeutet, dass Sie zurück zur Hauptwarteschlange gehen müssen und es dort tun. –

Antwort

0

try zu machen, anstatt zwei Blöcke, um das Bild abzurufen und setzen

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 

    // retrieve image from url 
    let image = UIImage(data: NSData(contentsOfURL: NSURL(string:self.postImageLink)!)!) 

    dispatch_async(dispatch_get_main_queue(), { Void in 
     // set image in main thread 
     cell.imageView?.image = image 
    }) 

} 

können mehr lesen here

0

Ihr Code funktioniert. nur sollte es ist, dass b Das Bearbeiten von UI-Objekten in der main_queue, dem Hauptthread der Benutzeroberfläche.

dispatch_async(dispatch_get_main_queue()) { 
    () -> Void in 
    // retrieve image from url 
    let image = UIImage(data: NSData(contentsOfURL:NSURL(string:self.postImageLink)!)!) 

    cell.imageView?.image = image 
} 
+0

Wenn ich die Else-Anweisung loslasse, findet der Compiler jedesmal mein postImageLink "nil". Ich kann nicht herausfinden, wie man die URL in den postImageLink innerhalb der if-Anweisung schreibt. =/Irgendwelche Gedanken? –