Problem Wert bei UILabel (iPhone SDK)
Ich bin einigermaßen neu in der iPhone SDK, also bitte verzeiht mir wenn diese Antwort ist lächerlich offensichtlich.
Ich habe einen ViewController verbunden .xib-Datei (man nennt Sie FirstViewController)
Ich habe auch eine benutzerdefinierte Klasse namens MyCustomClass. In dieser Klasse habe ich eine Methode wie diese:
- (void)setTheText {
[myLabel setText:@"foo"];
}
Möchte ich diese Methode aufrufen, um den text in einem label in FirstViewController.xib
So weit, ich habe dies getan:
Gezogen in ein "Objekt" in Interface Builder, und stellen Sie die Klasse auf: MyCustomClass
Angeschlossen der IBOutlet 'myLabel' aus MyCustomClass zu einem UILabel angezeigt.
Allerdings, wenn ich das Programm ausführen, und drücken Sie die Taste, um die Beschriftung (das ist in FirstViewController.m), etwas wie:
- (IBAction)doSomething:(id)sender {
MyCustomClass *customClass = [MyCustomClass alloc] init];
[customClass setTheText];
}
Diese nicht obwohl. NSLog(@"%@",[myLabel text]);
zurück (null)
Xcode zeigt keine Fehler oder Warnungen, was falsch sein könnte?
Dank,
Michael
Zusätzliche Info:
Schnittstelle zu MyCustomClass.h:
#import <UIKit/UIKit.h>
@interface MyCustomClass : NSObject {
UILabel *myLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *myLabel;
- (void)setTheText;
@end
Hinzugefügt, die main-post
InformationsquelleAutor Michael | 2010-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrer Instanz von customClass hier ist völlig unabhängig von der Feder. Haben Sie instanziiert ein neues Objekt mit +alloc. Wenn Sie möchten, ändern Sie die spezifischen MyCustomClass in Ihre Feder, dann FirstViewController muss ein IBOutlet verweist.
InformationsquelleAutor Rob Napier
Wollen Sie nicht erstellen Sie eine neue Instanz einer benutzerdefinierten Klasse in Ihrer Aktion-Methode.
Gibt es ein paar Möglichkeiten, das zu tun, was Sie wollen.
Option 1 ist zu geben, Ihre view-controller einen Verweis auf das benutzerdefinierte Objekt. Um dies zu tun, erstellen Sie eine Steckdose Typ
MyCustomClass *
in Ihrer view-controller, eine Verbindung, die Steckdose, um das neue Objekt, das Sie erstellt in der XIB-Datei, und dann loszuwerden, die Zuordnung in Ihrem action-Methode:Option 2 ist, lassen Sie Ihre
CustomClass
Griff sowohl die label-als und die action-Methode. Um dies zu tun, können Sie zur Vereinfachung die Dinge sogar noch weiter. Legen Sie eine Steckdose für denUILabel
in IhreCustomClass
, und dann einfach konvertieren Sie IhresetTheText
Methode in einer Aktion an:Verbinden Sie jetzt die Aktion bis zu Ihrem button, und alles sollte funktionieren wie ein Charme.
Hinweis: sollten Sie wahrscheinlich verwenden, den Namen einer Methode, die nicht mit "set", da Häufig verwendet für die property-setter als Teil der Kakao - KVC/KVO-system. Stattdessen würde ich es nennen so etwas wie
changeLabel
oder gleichwertig.InformationsquelleAutor e.James
UILabel haben auch eine Eigenschaft namens "text", um den Wert, die Sie finden können, zu erleichtern.
Gotcha, es ist mehr Bequemlichkeit für Menschen, die verwendet werden, um andere Sprachen sowieso.
InformationsquelleAutor Convolution
gut Sie nannten Ihr label zwei Dinge, die zunächst eine nicht-ibaction dann eine ibaction in der Eigenschaft.
InformationsquelleAutor Eman yalpsid