2011-11-16 13 views
9

Oto mój kod:UIAlertView pokazany z wątku tła i bez delegata tworzy EXC_BAD_ACCESS

#ifdef DEBUG 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ERROR" message:@"JSON Parsing Error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 
#endif 

Ten kod jest wykonywany w wątku tła (odpowiedzialny za parsowanie), a błąd zdarza się tylko co drugi raz. Masz pojęcie, jaki jest problem?

Odpowiedz

17

Nie zadzieraj z interfejsem z wątku tła. Tworzenie metody i wywołanie tej metody w głównym wątku:

[someObject performSelectorOnMainThread:@selector(showDebug:) 
          withObject:@"JSON Parsing Error" 
          waitUntilDone:YES]; 
+0

doskonała odpowiedź jak miałem problem w iOS 6.0, który został rozwiązany –

2

Nie należy wykonywać kod UI w osobnym wątku.

Jeśli aplikacja posiada graficzny interfejs użytkownika, zaleca się otrzymane wydarzeń związanych użytkownika oraz inicjowanie aktualizacji interfejsu od głównego wątku danej aplikacji. Takie podejście pomaga uniknąć problemów związanych z synchronizacją związanych z obsługą zdarzeń użytkowników i zawartością okna rysunku. Niektóre frameworki, takie jak kakao, zazwyczaj wymagają tego zachowania, ale nawet w przypadku tych, które tego nie robią, zachowanie tego zachowania w głównym wątku ma tę zaletę, że upraszcza logikę w zakresie zarządzania interfejsem użytkownika.

Threads and Your User Interface

Powiązane problemy