Stavo riscontrando problemi nella modifica di una vista all'interno di un thread. Ho provato ad aggiungere una sottoview ma ci sono voluti circa 6 o più secondi da visualizzare. Finalmente ho funzionato, ma non so esattamente come. Quindi mi chiedevo perché ha funzionato e che cosa è la differenza tra i seguenti metodi:Qual è la differenza tra performSelectorOnMainThread e dispatch_async sulla coda principale?
//this worked -added the view instantly
dispatch_async(dispatch_get_main_queue(), ^{
//some UI methods ej
[view addSubview: otherView];
}
//this took around 6 or more seconds to display
[viewController performSelectorOnMainThread:@selector(methodThatAddsSubview:) withObject:otherView
waitUntilDone:NO];
//Also didnt work: NSNotification methods - took also around 6 seconds to display
//the observer was in the viewController I wanted to modify
//paired to a method to add a subview.
[[NSNotificationCenter defaultCenter] postNotificationName:
@"notification-identifier" object:object];
Per riferimento questo sono stati chiamati all'interno di questo completetion Handler della classe del ACAccountStore.
accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
if(granted) {
//my methods were here
}
}
Edit: Quando dico che non ha funzionato volevo dire ci sono voluti circa 6 secondi per visualizzare la vista ho aggiunto.
Quando dici che 'performSelectorOnMainThread:' non ha funzionato, come ha funzionato? Hai ricevuto un messaggio di errore? È stato un errore di runtime un errore di compilazione? Se non hai ricevuto un errore, come sai che è fallito? –
È 'addSubview:' l'unico metodo che hai usato che ha toccato gli elementi dell'interfaccia utente, o ci sono anche altri? –
@AndrewMadsen Ho dimenticato di dire che ha funzionato ma ci sono voluti circa 6 o più secondi da visualizzare. –