Frage

Ich habe eine UITabBar Anwendung mit zwei Ansichten, die Last, große Datenmengen aus dem Internet in ihren „viewWillAppear“ Methoden. Ich möchte eine Statusanzeige oder eine Aktivitätsanzeige zeigen, während diese Daten abgerufen werden, um sicherzustellen, dass der Benutzer weiß die App nicht gefroren ist.

Ich bin mir bewusst, dass dies vor gefragt wurde. Ich brauche einfach eine Klarstellung auf, was scheint ein eher gute Lösung zu sein.

Ich habe den Code in dem Beispiel implimented. Die ursprünglichen Fragesteller der Frage gelöst später ihr Problem, durch das Abrufen von Daten in einer anderen „Fäden“ setzen. Ich verstehe das Konzept der Threads, aber ich weiß nicht, wie ich dies würde impliment.

Mit der Forschung habe ich herausgefunden, dass ich alle meine schweren Datenabruf in einem Hintergrund-Thread verschieben müssen, da alle UI-Aktualisierung im Hauptthread auftritt.

Wenn man so gut sein würde wie ein Beispiel für mich zu schaffen, wäre ich sehr dankbar. Ich kann Teile meines bestehenden Code nach Bedarf liefern.

War es hilfreich?

Lösung

Wenn Sie NSURLConnection verwenden es läuft auf einem anderen Thread automatisch.

in Ihrem viewDidLoad:

NSURLRequest *req = [NSURLRequest requestWithURL:theURL];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];

, dann müssen Sie einige benutzerdefinierte Methoden. Wenn Sie in -connection und drücken Sie Esc Typ finden Sie alle verschiedenen Methoden sehen Sie verwenden können. Es gibt drei, die Sie mit diesem benötigen:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // this is called when there is a response
        // if you're collecting data init your NSMutableData here
}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // each time the connection downloads a 
        // packet of data it gets send here
        // so you can do [myData appendData:data];
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
        // the connection has finished so you can 
        // do what you want with the data here
}

Das ist im Grunde alles, was es ist. NSURLConnection behandelt die alle selbst Multithreading und Sie müssen sich keine Sorgen machen. Jetzt können Sie einen Aktivitätsindikator und zeigt es schaffen und es wird funktionieren, weil der Haupt-Thread ist leer. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top