2011-06-09 8 views
7

Quizás uno Iphone Gurú me puede iluminar ...Iphone Tema Web _WebThreadLockFromAnyThread

He estado yendo línea por línea y la eliminación de cualquier hilo llama/NSInvocation de que utilizan el UIKit, como cuestión de hecho, han hecho 100% seguro de que NO basura UIKit se llama desde cualquier -donde más, excepto el TrenzadoPrincipal IE ..

if([NSThread isMainThread]) 
{ 
    blah.... 
    Call UIKit Crap here! 
    and blah.... 
} 

hasta aquí todo bien, pero luego después de haber creado un hilo para hacer un POST HTTP (usando libcurl) Comencé a recibir esto:

"void _WebThreadLockFromAnyThread (bool), 0x4d7bbe0: Obtención del bloqueo web de un hilo que no sea el hilo principal o el hilo web. UIKit no debería ser llamado desde un subproceso secundario."

Como WTF ...? Ni siquiera puedo Uso del enrollamiento de un hilo, para hacer una operación intensiva de red ..? Me acabo de mudar esta maldita cosa, de la TrenzadoPrincipal, para cumplir con su estricta "no llame a cualquier porquería UIKit, excepto desde el hilo principal ... PERÍODO o bien !!!"

Así que mover el "UiAlertView & UIActivityIndicator (de Apple) de UIKit "de nuevo en el hilo principal (No hay mensajes de error antes) y crea un hilo para hacer la operación POST de curl ... Ahora que estoy cumpliendo, y de repente, empiezo a recibir este mensaje ...?

¿Puede alguien explicar donde estoy supone que debe poner esta Red de operación intensiva, que, por cierto, hará que el Indicador de cualquier UIActivity/de UIAlertView se congele en sus pistas ...

Gracias de antemano ...

[soy sólo un programador de Linux con piel de cordero]

+1

No creo que "WTF" lo ayude a obtener buenas respuestas. Este no es un foro adecuado para eso. –

+0

¿Dónde actualizas tu vista de usuario? En su devolución de llamada curl necesita publicar el evento en el hilo principal. Publica un código –

+0

NSAutoreleasePool * pool = [[NSAutoreleasepool alloc] init]; PostComment (texto); // curl call [self performSelectorOnMainThread: @selector (stopIndicator) withObject: nil waitUntilDone: NO]; \t [pool release]; – NpC0mpl3t3

Respuesta

29

Ok, la respuesta (no tiene nada que ver con Curl o alguna notificación de ficción que el hilo principal)

Cualquier persona que recibe este error, Don 't pensar WEB T Hread o Main Thread, THINK, UITextView o UIScrollView o cualquier otra vista que pueda estar pasando a su nuevo hilo.

Mi problema era un UITextView.text, que se fue pasando como argumento para el nuevo hilo ... Por lo tanto "_WebThreadLockFromAnyThread (bool)"

Así que era una solución simple para copiarlo en una NSString local y pase esa copia en el argumento, que el nuevo hilo (IE .. Warning: UIKit should not be called from a secondary thread)

[NSThread detachNewThreadSelector: @selector(sendStuff:) toTarget: self withObject: self.textField.text]; 

Cuando vea huellas de cascos, piensa en caballos, NO cebra de.

+0

¡Buena respuesta! La advertencia no parece sugerir esto como un problema. Es posible que desee escribir su análisis (por el bien de los demás). –

+1

gracias por esto - UIKit debería haberme señalado al hecho de que estaba accediendo a mi searchBar.text en un hilo de fondo. – Slee