Domanda

Sto cercando di monitorare un filo che ho impostato in esecuzione in background. Ho bisogno di ricevere un avviso quando è terminato l'esecuzione.

- (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];
}
 }

Il codice sopra quello che ho dopo aver provato diversi set up al fine di raggiungere il risultato finale. Sto cercando di animare l'UIActivityIndicator mentre io uso questo metodo "getSetDisplay" per afferrare le informazioni dalla rete.

La funzione è buona, ma l'indicatore di attività non era venuta in su. Mi è stato detto che avevo bisogno di eseguire il processo su un thread in background e l'animazione sul thread principale. Il mio problema ora è come faccio monitor per quando questo processo è fatto per fermare l'indicatore di attività. grazie in anticipo

È stato utile?

Soluzione

Si dovrebbe considerare il problema da una prospettiva diversa: si dovrebbe lasciare che il vostro "filo conduttore" continuano a correre, e lasciate che il vostro "thread secondario" chiamata un selettore sul thread principale quando è fatto facendo un lavoro

.

Per fare questo, è necessario utilizzare il metodo performSelectorOnMainThread, e chiamarlo dal thread secondario. Il suo prototipo è - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait. Si dovrebbe inserire il codice "finitura" in un metodo, e poi fare qualcosa di simile:

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

Altri suggerimenti

Grazie ragazzi. Finalmente ho avuto una soluzione che ha funzionato grazie a Mike e il suo al di sopra commento.

- (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];
}

Ho iniziato l'indicatore di attività sul con la "[Attività startAnimating]", che viene eseguito sul thread principale. Poi ho iniziato il mio metodo su un thread in background con la "performSelectorInBackground". E alla fine del mio metodo "getSetDisplay", ho messo la seguente dichiarazione.

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

Questo è un altro modo per dire [attività stopAnimating], che lavora sul thread principale.

Grazie a tutti che hanno risposto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top