Xcode - Update label-text, wenn die Taste gedrückt wird, in anderen anzeigen
Newbie-Frage für Xcode gurus...
Habe ich zwei Ansichten. Sie verwenden beide die gleichen benutzerdefinierten Klasse. In view_1 ich habe einen button und wenn dieser gedrückt wird view_2 wird sich zeigen. In view_2 ich habe ein label, die haben Ihren text geändert, wenn ich drücken Sie die Schaltfläche in view_1. Ab sofort sind die Label_1 ist null, wenn ich einen breakpoint setzen und es deshalb nutzlos. Wie kann ich get update dieses label, wenn ich den Knopf drücken? Ihr sind einige Ausschnitte aus meinem code...
Dies ist meine .h-Datei:
@interface ViewController : UIViewController
{
IBOutlet UIButton *buttonSelectTimeInterval;
IBOutlet UILabel *labelTimer;
}
@end
Dies ist die button-Aktion in meinem .m-Datei:
- (IBAction)startPouring_ButtonClick:(id)sender
{
labelTimer.text = @"foo";
}
...aber mein .m-Datei scheint nicht zu wissen, die labelTimer da ist es eine null. Warum ist das so? Es ist instanziiert in der .h-Datei.
Jemand?
- Dude seine nicht funktioniert. Weil wenn Sie versucht haben, drücken Sie die Taste view_1 damals view_2 Eigenschaften sind nicht belegt. Eine weitere Sache, die Sie öffnen können view_2 und auf view_2 Methode viewWillAppear zuzuordnen, können Sie den text, den Sie einstellen möchten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie NSNotificationCenter. Setzen Sie diese in Ihr IBAction.
Und diese zu Ihrem viewDidLoad.
irgendwo in Ihr .m
Können Sie
NSNotificationCenter
für diese.Hier sind die apple-Dokumentation link.
Ersten, nichts ist "instanziert" wird .h - Datei-das ist nur die öffentliche Auflistung, welche Eigenschaften und Methoden an andere Klassen. Denke der header-Datei als eine Tabelle der Inhalt, sondern nur für das, was die Klasse will, dass andere zu sehen.
Diese Eigenschaften nicht vorhanden sind, im Speicher, bis die Instanz der Klasse selbst erstellt, und auch nur dann, wenn Sie Sie auf einige anfängliche Wert, wenn man Sie braucht.
Wie & wo sind Sie bei der Erstellung der 2. Blick? Ist es ein storyboard segue, oder was? Der 1. Ansicht nicht scheinen, um eine Möglichkeit zu wissen, die 2. existiert, so wird es nicht in der Lage sein zu sehen oder Zugriff auf die label.
View1Class.m
Wie gesagt, es ist noch nicht klar, wie/wo bist du eigentlich die Anzeige der 2. Blick allerdings, so das snippet oben ist unvollständig. Könnten Sie ein modales w/ein Delegierter oder dies ist, wo
NSNotificationCenter
ist eine hilfreiche option, der 2. Blick können sich anmelden, um Benachrichtigungen & ändern sich entsprechend. Es gibt zahlreiche tutorials über das erstellen eines 2ten/modal anzuzeigen und die Anzeige auf eine Schaltfläche klicken, sollten Sie wahrscheinlich Blick auf diese zu klären, wie die Struktur einer solchen app sollte funktionieren.Diese Antwort sollten Sie auf der richtigen Spur.
Anderen konkreten Fragen:
Warum ist das label
nil
? Weil es nicht ein...In diesem IBAction, die scheint, in Ansicht 1:
... es ist die Suche nach dem eigenen
labelTimer
IBOutlet (in dem Fall sollte es wohl auch seinself.labelTimer.text
), und nicht, dass der 2. Blick. Wenn der 1. Ansicht nicht einmal ein IBOutlet UILabel, das ist ein anderes problem.Wenn die views haben unterschiedliche Funktionen & unterschiedliche Eigenschaften, Sie wahrscheinlich sollte nicht Instanzen des gleichen benutzerdefinierten Klasse. Wenn der 1. Ansicht nicht haben oder brauchen, UILabel, es sollte nicht in seine .h. Wenn der 2. Ansicht nicht haben oder benötigen ein-Taste, es sollte nicht in seine .h. Wenn der Blick auf die unterschiedlichen Zwecken dienen, die dann in verschiedene Klassen.
BTW,
Da Sie mit Instanzvariablen für Ihre IBOutlets, würden Sie brauchen, um schreiben Sie Ihre eigene getter & setter-Methoden, wenn Sie wollen, ändern sich Ihre Werte. Hast du? Um diese Werte zugänglich zu anderen Klassen, die Sie brauchen würde, um die Methoden public & setzen Sie Sie in die .h. Es ist keine gute Praxis für eine Instanz um Instanz-Variablen direkt w/o getter/setter und andere Objekte sollten auf jeden Fall nicht.
Die bevorzugte Methode ist die Verwendung von @ - Eigenschaften für die IBOutlets statt deklarieren Sie als Instanz-Variablen. Dieser erstellt automatisch die getter & setter-Methoden, die Sicherung im Speicher speichern, und wie von XCode 4.4 es fügt automatisch @synthetisieren, so dass Sie nicht mehr so tun müssen. Die Erklärung Ihrer IBOutlets als "schwache" Referenzen verhindert retain-Zyklen & memory-leak, wo der Blick hält sich an den outlets & die Auslässe halten, um die Ansicht & nichts geht jemals Weg...
View1Class.h
View2Class.h