2012-04-10 15 views
4

Ich brauche eine Art von Lazy Loading in meinem UITableView implementieren.UITableView Lazy Ladezelle Daten

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //... some initializations here 

    //this is a function that pulls my cell data using helper class 
    NSData *cellData=[MyDataClass dataForCellAtIndexPath:indexpath.row]; 

    //... here I populate pulled data to cell 

    return cell; 
} 

Alles funktioniert gut, aber Tabellenansicht blättert nicht reibungslos, weil dataForCellAtIndexPath Verfahren langsam ist. Also muss ich faule Daten in Zellen implementieren, indem ich diese Methode aufruft. Das Ergebnis, das ich erwarte, ist, dass die Tabellenansicht reibungslos scrollt, aber der Inhalt der Zelle wird ein wenig gefüllt, nachdem die Zelle gezeichnet wurde. Hilf mir bitte, Wie kann es gemacht werden?

Antwort

3

Ja, Sie könnten Ihre Datensammlung auf einen Hintergrundthread schieben. Das erste, was zu versuchen, ist die einfachste Möglichkeit, um zu sehen, ob es etwas verbessert:

[MyDataClass performSelectorInBackground:@selector(dataForCellAtIndexPath:) withObject:indexpath.row]; 

Diese post erwähnt einige der anderen, komplexeren, anpassbare Optionen wie Grand Central Dispatch und NSThread.

+0

Was wird es verbessern? Wenn die Zelle gezeichnet werden muss, sollte sie sofort gezeichnet werden. Eine langsame Methode in jedem Profil zu wählen, wird also nichts bewirken. Aber danke für die Referenzen – Oleg

+0

@Oleg Es würde ermöglichen, die Zellen sofort gezeichnet werden und ihren Inhalt danach ausgefüllt. – GregularExpressions

+0

Hm .. interessant. Ich werde es jetzt versuchen. – Oleg

2

Wenn Sie eine große Menge an Daten verwenden, würde ich empfehlen, sie auf Core-data zu speichern und/oder NSFetchedResultsController verwenden, um Ihre Tabelle zu füllen.

Es wurde erstellt & gebunden mit Ihrem TableView vor allem um Ihre Tabelle schneller zu füllen und hohe Leistung zu haben.

Hier ist der Link zur Dokumentation von NSFetchedResultsController!

+0

Jetzt verwende ich nicht coredata. Daher ist 'NSFetchResultsController' nutzlos. – Oleg

+0

Wie groß ist Ihre Datenquelle? – Legolas

+0

Es ist ziemlich groß. – Oleg

-1

für die u können Sie Ihre neue Daten auf der Grundlage des Indexwertes von Tabellenzellen

laden Sie Bedingung für setzen, wie viele neue Daten, die Sie laden mögen, weil sein, auf der Zelle s hängt derzeit von der Studie ist Benutzer.