Update images in tableviewcell

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Update images in tableviewcell

    Moin!
    Ich lade kleine Bilder vom Server, das bewirkt dass das Scrollen sehr hakelig ist. Deswegen habe ich das in NSOperationQueues gepackt. Funktioniert fast, nur werden die Bilder erst nach ein paar Sekunden angezeigt. Wechsle ich in einen anderen Tab und komme zurück sind sie sofort da (in den sichtbaren Zellen).
    Wie kann man das richtig refreshen?

    Quellcode

    1. NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];
    2. myQueue.name = @"Download Queue";
    3. myQueue.MaxConcurrentOperationCount = 3;
    4. // Add an operation as a block to a queue
    5. [myQueue addOperationWithBlock: ^ {
    6. // a block of operation
    7. NSString *url2=[url stringByReplacingOccurrencesOfString:@".jpg" withString:@"@2x.jpg"];
    8. img.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url2]]];
    9. NSLog(@"Lade %@",url2);
    10. [cell.contentView addSubview:img];
    11. [cell setNeedsDisplay];
    12. [cell performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
    13. // Get hold of main queue (main thread)
    14. [[NSOperationQueue mainQueue] addOperationWithBlock: ^ {
    15. //[cell.contentView addSubview:img];
    16. NSInteger showinfo=[[searchResultArray objectAtIndex:ind*elementsOfArray+14] intValue];
    17. if (showinfo>0) {
    18. UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(251,55, 25, 25)];
    19. imv.image=[UIImage imageNamed:@"info2.png"];
    20. imv.alpha=0.8;
    21. [cell.contentView addSubview:imv];
    22. }
    23. NSString *rolliString=[[NSString alloc]initWithString:[searchResultArray objectAtIndex:ind*elementsOfArray+9]]; // Rolli
    24. NSInteger rolli1=[rolliString intValue];
    25. if (rolli1>0) {
    26. UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(200,55, 25, 25)];
    27. imv.image=[UIImage imageNamed:@"rolli2.png"];
    28. [cell.contentView addSubview:imv];
    29. }
    30. [cell setNeedsDisplay];
    31. }];
    32. }];
    Alles anzeigen


    Es geht um das erste [cell.contentView addSubview:img], die anderen in [[NSOperationQueue mainQueue] addOperationWithBlock: werden sofort angezeigt. Gebe ich den Code zum Laden der Bilder vom Server in diesen Block, werden die Bilder sofort angezeigt, aber es hakt beim scrollen.
    Jemand ne Idee wie ich ein refresh erzwingen kann?

    Nachtrag: Wenn ich nichts mache, tauchen die Bilder so langsam nach ca. 7-10 Sekunden auf.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gondomir ()

  • Hat sich erledigt, ich habe zuerst ausserhalb das [cell.contentView addSubview:img] mit einem leeren image gemacht, dann das Bild im [self.myQueue addOperationWithBlock: ^ { geladen.
    Danach in der mainQueue zugewiesen:
    [[NSOperationQueue mainQueue] addOperationWithBlock: ^ {
    img.image=myImage;
    }];

    Jetzt klappt es.