我有我的ViewController.h / m和另一个类Keyboard.h / m。 在我的ViewController.h中,我有一个UILabel:
@interface ViewController : UIViewController{
UILabel *label;
}
@property (nonatomic, retain) IBOutlet UILabel *label;
我的ViewController.m看起来如此
#import "ViewController.h"
@synthesize label;
...
现在我想从Keyboard.m更改标签。 我尝试过这样的事情:
#import "ViewController.h"
...
ViewController *vc;
vc.label.text = @"text";
它编译没有任何错误,但标签不会改变
答案 0 :(得分:1)
你在这里很容易出错。
ViewController *vc;
声明一个指针,但不会初始化;因此,当您访问其属性vc.label.text时,objc_messageSend()将传递一个虚假的指针,因此它可能会崩溃! (如果你没有这样做,你很幸运。)
无论如何:如果你做得好,就像ViewController *vc = [[ViewController alloc] init];
创建一个新实例不会影响另一个实例。你必须将指针存储到某个地方,例如e。 G。将@property (retain) ViewContrller *vc;
设置为应用程序的app delegate对象,并通过该属性访问它,如下所示:
[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] vc].label.text = @"new text";
它应该有效。
希望它有所帮助。
答案 1 :(得分:0)
你是如何启动你的vc变量的?我猜这是错误的来源。尝试做:
vc = [[ViewController alloc] initWithNibName:@ ViewController“];
如果您已经这样做,请确保您的IBOutlet正确连接。您正在正确设置变量,因此错误必须来自其他地方。