0

我知道这个问题经常被问到,我已经阅读了很多,但我仍然无法让它发挥作用。假设我有两个班级,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 不为零,因为它每秒都在更改,并且还在加载 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 按预期输出日期。

4

4 回答 4

1

如果你没有遗漏很多代码,

-(void) thisMethodIsCalled {
mainGame = [[MainGameDisplay alloc] init];

self.theSecondLabel.text = mainGame.theLabel.text;
NSLog(@"%@",mainGame.theLabel.text); //Output is '(Null)'
}

不会工作.. 没有人可以在 alloc init 和获取 .text 变量之间修改 mainGame....

[@all 我知道这不是答案,但评论的格式很糟糕。我会根据需要编辑或删除它]

于 2012-11-20T19:20:48.287 回答
1

我假设 MainGameDisplay 是您的 FirstClass。然后,为了更新 SecondClass 对象中的 theSecondLabel.text,您需要传递 FirstClass 对象,而不是在方法调用中实例化它。

我想你需要做这样的事情(这是一个非常简单的例子)

  1. 将属性添加到您的 SecondClass @property (nonatomic, strong) FirstClass *firstClass;

之后:

1)创建FirstClass的实例,让它有名字firstClass。

2) 创建 SecondClass 的实例。SecondClass *secondClass = [[SecondClass alloc] init];

3) 将第二类的属性设置为第一类的实例

secondClass.firstClass = firstClass;

4) 现在您有了对 FirstClass 实际对象的引用,并且可以访问它的属性。

-(void) thisMethodIsCalled {

    self.theSecondLabel.text = self.firstClasss.theLabel.text;
    NSLog(@"%@",mainGame.theLabel.text); 
}

我希望这将有所帮助。

于 2012-11-20T20:27:28.980 回答
0

方法名称是文本,而不是文本。大小写很重要,使用 T 较低的文本会导致错误。

于 2012-11-20T19:07:38.783 回答
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);
}
于 2012-11-20T19:09:28.230 回答