In meiner App habe ich einen UITableViewController.Daten von UITableView im Hintergrund neu laden
Ihr TableView ist in 3 Abschnitte unterteilt.
Ich lade Daten für jeden dieser Abschnitte von meinem Server. Um dies zu tun, habe ich 3 Funktionen (zum Beispiel f1 f2 und f3). Jeder aktualisiert ein entsprechendes NSArray, das als Datenquelle für meine Tabelle verwendet wird.
Nun, was ich will, ist Daten mit diesen Funktionen neu zu laden und aktualisieren Sie meine TabelleView, sobald diese 3 Funktionen erledigt sind, aber ohne den Benutzer zu stören.
Ich bin nicht mit asynchronen Anfrage verwendet, Blöcke, Threads etc ... und ich bin auf der Suche nach Tipps.
Eigentlich ist hier, was ich tue:
-(void)viewDidLoad
{
//some settings
[NSTimer scheduledTimerWithTimeInterval:15.0 target:self selector:@selector(reloadDatas) userInfo:nil repeats:YES];
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(queue, ^{
[self reloadDatas];
});
}
-(void)reloadDatas
{
dispatch_queue_t concurrentQueue = dispatch_get_main_queue();
dispatch_async(concurrentQueue, ^{
[self f1];
[self f2];
[self f3];
[myDisplayedTable reloadData];
});
}
-(void)f1
{
//load datas with a url request and update array1
}
-(void)f2
{
//load datas with a url request and update array2
}
-(void)f3
{
//load datas with a url request and update array3
}
Aber hier mein Tableview „eingefroren“, bis sie aktualisiert wird.
Ich interessiere mich nicht für die Reihenfolge der Ausführung von f1 f2 und f3, aber ich muss warten, bis diese 3 Funktionen durchgeführt werden, bevor ich meine TableView aktualisieren.
Danke für Ihre Hilfe.
EDIT
Vielen Dank für Ihre Antworten.
Hier ist die Arbeitslösung:
Als MROS suggets ich die Absende-Warteschlange aus der viewDidLoad entfernt und ersetzt in reloadDatas:
dispatch_queue_t concurrentQueue = dispatch_get_main_queue();
mit
dispatch_queue_t mainThreadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
Und schließlich, Ich lade meinen Tisch in einen Hauptfaden
dispatch_async(dispatch_get_main_queue(), ^{ [myDisplayedTable reloadData]; });
Y haben Sie concurrentQueue erstellt? – abhi1992