UILabelter Text wird nicht aktualisiert
Ich bin nicht in der Lage zu ändern, die UILabel text. Der code für das UILabel innen viewDidLoad :
startLabel=[[UILabel alloc] initWithFrame:CGRectMake(75, 395, 200, 30)];
startLabel.text=@"Recording Sound ...";
startLabel.backgroundColor=[UIColor clearColor];
startLabel.textColor=[UIColor whiteColor];
startLabel.font=[UIFont boldSystemFontOfSize:17];
[self.view addSubview:startLabel];
Später, wenn ich will, ändern Sie die Bezeichnung, den text mit dem folgenden code, es ist keine Veränderung an der app :
startLabel.text=@"Searching Database ...";
oder
[startLabel setText:@"Searching Database ..."];
Dem UILabel ist nicht leer, ich habe es ausgedruckt beim Debuggen und es zeigt sich :
(gdb) po startLabel
<UILabel: 0x2c1a30; frame = (75 395; 200 30); text = 'Searching Database ...';
clipsToBounds = YES; userInteractionEnabled = NO; layer = <CALayer: 0x2ae8f0>>
So, der text ändert sich die Beschriftung innerhalb des UILabel, die aber nicht auf dem Bildschirm aktualisiert.
Kann jemand bitte lassen Sie mich wissen, was
Ich bin hier noch fehlt ? Danke.
Edit 1: ich habe versucht performSelectorOnMainThread:
- nicht für mich arbeiten.
Edit 2: ich bin mit AVFoundation
und ASIHTTP
Klassen Ton aufzeichnen und laden Sie die aufgezeichnete Datei hier. Sonst nichts. Nicht verwenden jedem thread.
InformationsquelleAutor der Frage Ahsan | 2011-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht stehen Sie vor einem Problem mit dem Durchzug, wie erwähnt, in den Kommentaren oben. Wenn Sie eine Methode, die ausgeführt wird, auf dem Haupt-thread und hat einige Aktivitäten (z.B. Suche in der Datenbank), updates, die Sie auf der Benutzeroberfläche werden nicht übernommen, bis der run-Schleife erhält die Kontrolle. Also, wenn Sie haben eine lange, zeitaufwändige Aufgabe, da auf dem Haupt-thread, führen Sie den folgenden code nach dem einstellen der text des Etiketts:
Sollte diese leeren, UI-änderungen, die Sie gemacht haben. Dies ist zwar eine sinnvolle und funktionsfähige hack, es schlägt nicht die alternative. Ich hoch empfehlen, dass Sie führen Sie Ihre app zeitaufwändige Aufgaben, die auf einem hintergrund-thread und die Aktualisierung der Benutzeroberfläche durch den main-thread mit
performSelectorOnMainThread:withObject:waitUntilDone:
. Siehe Apple Seite auf iOS-Thread-Management.InformationsquelleAutor der Antwort Alex Nichol
In meinem Fall die Funktion, die aktualisiert wurde, war aufgerufen ein touch-Erkennung auf einen thread, aber der Ort, in der Funktion, wo ich bin und ändern Sie den Wert der Eigenschaft text des Labels legte ich wieder auf den Haupt-thread:
InformationsquelleAutor der Antwort ndoc
Mir ist ein bisschen mehr unerwartete, aber vernünftig-nicht etwas, was jemand denkt zu schwer über.
Ich soll ein update der
UILabel
wenn ich eineNSNotification
dass ich gefeuert woanders. Allerdings die Benachrichtigung wurde abgefeuert aus einem hintergrund-thread so auch die listener-Methoden, aktualisieren Sie den text des Etiketts ausgelöst werden, in den hintergrund.Wenn Sie sich auf eine
NSNotification
zur Aktualisierung der label, oder Ihre Ansichten, machen Feuer derNSNotification
von der Haupt-UI-thread.InformationsquelleAutor der Antwort Matt Quiros
Hatte ich ein UILabel zeigt eine Ebene Zahl, wäre nicht ein update auf das neue level-Nummer auf einem UIViewController. Die einzige praktikable Lösung, die ich finden konnte, der gearbeitet wurde, zu nennen setNeedsDisplay auf dem Haupt-thread von der view-controller, die im Besitz der UILabel
}
Sehen http://iosdevelopmentjournal.com/blog/2013/01/16/forcing-things-to-run-on-the-main-thread/ für eine ausführlichere Erklärung
InformationsquelleAutor der Antwort user1233894