Frage

Ich versuche, einen Thread zu überwachen, den ich im Hintergrund läuft. Ich muss alarmiert werden, wenn es ausgeführt wird.

- (IBAction) btnGreaterTen_clicked :(id)sender{

    self.searchDistance = [NSNumber numberWithDouble : 10];

    CGRect frame = CGRectMake (120.0, 185.0, 80, 80);

    activity = [[UIActivityIndicatorView alloc] initWithFrame: frame];
    activity.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;


    [navigationUpdateFromDetail.window addSubview: activity];


    [activity startAnimating];


    thread = [[NSThread alloc] init];
    [thread start];

[self performSelectorInBackground: @selector (getSetDisplay) withObject:nil];         

if(thread.isFinished == YES){
    [activity stopAnimating];
}
 }

Der obige Code, was ich nach dem Ausprobieren anderer Einrichtung habe, um das Endergebnis zu erreichen. Ich versuche, den Uiactivity -Indikator zu animieren, während ich diese Methode "getSetDisplay" verwende, um Informationen aus dem Netz zu erhalten.

Die Funktion ist gut, aber der Aktivitätsindikator kam nicht auf. Mir wurde gesagt, dass ich den Prozess auf einem Hintergrund -Thread und der Animation im Haupt Thread ausführen musste. Mein Problem ist nun, wie ich überwachte, wenn dieser Vorgang durchgeführt wird, um den Aktivitätsindikator zu stoppen. Vielen Dank im Voraus

War es hilfreich?

Lösung

Sie sollten das Problem aus einem anderen Blickwinkel berücksichtigen: Sie sollten Ihren "Hauptfaden" fortsetzen lassen und Ihren "Sekundärfaden" einen Selektor auf dem Haupt -Thread aufrufen lassen, wenn er funktioniert.

Um dies zu erreichen, sollten Sie die verwenden performSelectorOnMainThread Methode und rufen Sie es von Ihrem sekundären Thread an. Sein Prototyp ist - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait. Sie sollten Ihren "Finishing" -Code in eine Methode einfügen und dann so etwas tun wie:

[self performSelectorOnMainThread:@selector(doneDoingWork) withObject:nil waitUntilDone:NO];

Andere Tipps

Danke Jungs. Ich bekam endlich eine Lösung, die dank Mike und seinem obigen Kommentar funktioniert hat.

- (IBAction) btnGreaterTen_clicked :(id)sender{

self.searchDistance = [NSNumber numberWithDouble : 10];


[activity startAnimating];

NSLog(@" search value after change %@", [searchDistance description]);

[self performSelectorInBackground: @selector (getSetDisplay) withObject: nil];
}

Ich habe den Aktivitätsindikator mit dem [Aktivitätsstartanimating] begonnen, der auf dem Hauptfaden ausgeführt wird. Dann startete ich meine Methode mit dem "Performselectorinbackground" auf einem Hintergrund -Thread. Und am Ende meiner "getSetDisplay" -Methode habe ich die folgende Aussage gegeben.

[activity performSelectorOnMainThread: @selector (stopAnimating) withObject:nil   waitUntilDone:NO];

Dies ist nur ein weiterer Weg, um [Aktivitäts -Stopanimating] zu sagen, das am Hauptfaden arbeitet.

Vielen Dank an alle, die geantwortet haben.

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