2012-03-27 3 views
0

Fast jede ios App hat jetzt etwas wie "Feed" -Option. Programmierung, die in der Regel Abrufen von Bildern aus dem Internet, Zwischenspeichern von ihnen, Umgang mit Seiten, "Pull-to-Update-Option", etc. - all die Standart-Sachen.Tabellenansicht mit Bild-Caching und "pull to update" -Option

Aber es sieht so aus als gäbe es keine Standardlösung dafür?

  • Ich versuchte "drei 20" - wirklich große, komplizierte Bibliothek mit vielen Modulen. Es fehlt wirklich eine gute Dokumentation! Und es hatte auch "Verlangsamungen" beim Abrufen von Bildern aus dem Cache.

  • Vielleicht sollte ich verschiedene kleine Bibliotheken für jede kleine Aufgabe separat verwenden? Wie HJCache, EGO usw.

  • Oder ist es besser, alles von Grund auf ohne Bibliotheken zu schreiben?

  • Bitte geben Sie mir Ratschläge zu Best Practices hier, ich bin jetzt wirklich fest.

    Antwort

    0

    This one ist sehr einfach zum Einlegen für Pull zu aktualisieren.

    Für Bild Laden, schrieb ich die folgende Kategorie für UIImageView:

    // .h 
    @interface UIImageView (UIImageView_Load) 
    - (void)loadFrom:(NSURL *)url completion:(void (^)(UIImage *))completion; 
    @end 
    
    // .m 
    #import "UIImageView+Load.h" 
    #import <QuartzCore/QuartzCore.h> 
    
    @implementation UIImageView (UIImageView_Load) 
    
    - (void)loadFrom:(NSURL *)url completion:(void (^)(UIImage *))completion { 
    
        NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
         if (data) { 
          self.image = [UIImage imageWithData:data]; 
          if (completion) completion(self.image); 
         } 
        }]; 
    } 
    
    @end 
    
    // To use it when building a cell 
    
    //... 
    
    MyModelObject *myModelObject = [self.myModel objectAtIndex:indexPath.row]; 
    if (myModelObject.image) { 
        cell.imageView.image = myModelObject.image; 
    } else { 
        NSURL *url = [NSURL urlWithString:myModelObject.imageUrl]; 
        [cell.imageView loadFrom:url completion:^(UIImage *image) { 
         // cache it in the model 
         myModelObject.image = image; 
         cell.imageView.image = image; 
        }]; 
    } 
    
    // ... 
    
    +0

    Danke für die Antwort, @danh! Leider enthält es keine Caching-Lösung. Aber ich werde Leahs "Pull to Refresh" versuchen. – Danik

    +0

    @Danik - sicher. Der Code, den ich eingefügt habe, lädt etwas langsamer und speichert das Modell im Callback. – danh

    +0

    Ja, ich sehe jetzt, Sie speichern es in myModelObject.image! Löschen Sie den Cache auf didReceiveMemoryWarning oder beschränken Sie die maximale Größe? – Danik

    0

    Ich bin ein Fan von Leah Pull to Refresh Bibliothek Culver, oder diese STableViewController, die ebenso wie endlose Scrollen Griffe nach unten ziehen aktualisieren .

    Zum Laden von Bildern versuchen Sie SDWebImage aus der DailyMotion App.

    +0

    Danke! Ich verwende Leah's Pull to Refresh und SDWebImage für mein aktuelles Projekt. – Danik