Warnung: UIKit sollte nicht aufgerufen werden, von einem sekundären thread aus
In meiner iPhone-app, die ich brauche, um eine Verbindung zu einem web-server, dies kann einige Zeit dauern, ich bin über threads wie diesen:
[NSThread detachNewThreadSelector:@selector(sendStuff) toTarget:self withObject:nil];
- (void)sendStuff {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//Need to get the string from the textField to send to server
NSString *myString = self.textField.text;
//Do some stuff here, connect to web server etc..
[pool release];
}
Auf die Zeile, in der ich selbst.textField ich bekomme eine Warnung in der Konsole sagt:
void _WebThreadLockFromAnyThread(bool), 0x5d306b0: Erlangung der web-sperren aus einem anderen thread als dem Hauptthread oder das web-thread. UIKit sollte nicht aufgerufen werden, von einem sekundären thread aus.
Wie kann ich dem textField, ohne immer diese Fehlermeldung?
Um Ihnen zu helfen müssten wir wissen, warum Sie abnehmen ein thread (Was so lange dauert, das zu tun), welche UI-Informationen, die Sie benötigen, und welche UI-Informationen, die Sie aktualisieren möchten.
Hi! Ich aktualisiert die Frage. Ich muss eine Verbindung zum web-server, und ich muss der text aus dem textField zu senden an server.
Sie sollten akzeptieren, Graham Lee oder tonklon Antwort. Sie sollten ziehen Sie den text suchen, bevor Sie laichen in den thread, und übergeben Sie Sie als argument an den Selektor.
Hi! Ich aktualisiert die Frage. Ich muss eine Verbindung zum web-server, und ich muss der text aus dem textField zu senden an server.
Sie sollten akzeptieren, Graham Lee oder tonklon Antwort. Sie sollten ziehen Sie den text suchen, bevor Sie laichen in den thread, und übergeben Sie Sie als argument an den Selektor.
InformationsquelleAutor Martin | 2010-07-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt ein wenig davon ab, was Sie tun möchten, mit der textField. Wenn das Lesen der Wert ist die einzige Sache, die Sie tun können:
Wenn Sie einen Wert ändern wollen, die auf der textField Sie konnte:
InformationsquelleAutor tonklon
Führen Sie alle Selektoren, die mit UI-updates auf dem Haupt-thread. Sie können dies tun, mit der NSObject-Methode
-performSelectorOnMainThread:withObject:waitUntilDone:
InformationsquelleAutor Alex Reynolds
Warum nicht:
?
InformationsquelleAutor
Dies ist in der Tat unsicher Verhalten. Der MainThread ist der einzige, sollte die Schnittstelle der UI. Habe deinen thread zurück, für-Instanz eine Zeichenfolge an den mainthread und haben eine Methode update der Benutzeroberfläche. Sie tun können, zum Beispiel dies tun, indem ein Selektor, um zu dem anderen thread-Methode, und dann haben die anderen thread-Aufruf der Selektor auf den mainthread.
InformationsquelleAutor niklassaers
arbeiten
InformationsquelleAutor user3269480