我知道这个问题经常被问到,我已经阅读了很多,但我仍然无法让它发挥作用。假设我有两个类,FirstClass和SecondClass。 FirstClass有一个标签,SecondClass想要获得该标签的文本。这就是我所做的:
//FirstClass
@interface FirstClass : UIViewController
{
@public
UILabel *theLabel;
}
@property (strong, nonatomic) UILabel *theLabel;
@implementation FirstClass
@synthesize theLabel;
//SecondClass
#import "MainGameDisplay.h"
@interface SecondClass : UIViewController
{
MainGameDisplay *mainGame;
}
@property (strong, nonatomic) UILabel *theSecondLabel;
@implementation SecondClass
-(void) thisMethodIsCalled {
mainGame = [[FirstClass alloc] init];
self.theSecondLabel.text = mainGame.theLabel.text;
NSLog(@"%@",mainGame.theLabel.text); //Output is '(Null)'
}
theLabel.Text不是nil,因为它每秒都在更改,并且还在加载SecondClass视图时在后台运行的另一个控制器上显示标签。如果我完全错了,有人可以指点我的写作方向,或者给我一些关于如何做到这一点的例子。谢谢。
编辑:
@Implementation FirstClass
@synthesize theLabel;
- (void)viewDidLoad {
[self superview];
[self startTickCount];
}
-(void) startTickCount {
timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(timeChanger) userInfo:nil repeats:YES];
}
-(void) timeChanger {
theDay++;
NSLog(@"%@",self.theLabel.text);
if (theDay <= 9)
self.theLabel.text = [NSString stringWithFormat: @"0%i", theDay];
else
self.theLabel.text = [NSString stringWithFormat: @"%i", theDay];
if (theDay > 27)
[self monthChanger];
}
这就是它。 NSLog按预期输出当天。
答案 0 :(得分:1)
如果你没有遗漏大量的代码,
-(void) thisMethodIsCalled {
mainGame = [[MainGameDisplay alloc] init];
self.theSecondLabel.text = mainGame.theLabel.text;
NSLog(@"%@",mainGame.theLabel.text); //Output is '(Null)'
}
不起作用..没有人可以在alloc init和.text变量之间修改mainGame ....
[@所有我知道这不是一个答案,但评论的格式很糟糕。我会根据需要编辑或删除它]
答案 1 :(得分:1)
我认为MainGameDisplay是你的FirstClass。然后,为了更新SecondClass对象中的SecondLabel.text,您需要传递FirstClass的对象,而不是在方法调用中实例化它。
我想你需要做这样的事情(这是一个非常简单的例子)
之后:
1)创建FirstClass的实例,让它具有名称firstClass。
2)创建SecondClass的实例。 SecondClass * secondClass = [[SecondClass alloc] init];
3)将Second类的属性设置为FirstClass的实例
secondClass.firstClass = firstClass;
4)现在您可以参考FirstClass的实际对象并可以访问其属性。
-(void) thisMethodIsCalled {
self.theSecondLabel.text = self.firstClasss.theLabel.text;
NSLog(@"%@",mainGame.theLabel.text);
}
我希望这会有所帮助。
答案 2 :(得分:0)
方法名称是文本,而不是文本。这种情况很重要,使用较低T的文本会导致错误。
答案 3 :(得分:0)
如果这是您的代码,那么您有两个问题。首先,Text
不必要地大写。其次,TheLabel
不必要地大写。
编辑代码:
-(void) thisMethodIsCalled {
mainGame = [[MainGameDisplay alloc] init];
// 'text' shouldn't be capitalized
// 'theLabel' shouldn't be capitalized
self.theSecondLabel.text = mainGame.theLabel.text;
NSLog(@"%@",mainGame.theLabel.text);
}