0

この質問はよく聞かれることを知っています。私はそれについてたくさん読んだことがありますが、まだうまくいきません。FirstClass と SecondClass の 2 つのクラスがあるとします。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 は期待どおりに日を出力します。

4

4 に答える 4

1

MainGameDisplay はあなたの FirstClass だと思います。次に、SecondClass オブジェクトの SecondLabel.text を更新するには、FirstClass のオブジェクトを渡し、メソッド呼び出しでインスタンス化しないようにする必要があります。

このようなことをする必要があると思います(これは非常に単純な例です)

  1. SecondClass @property (nonatomic, strong) FirstClass *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); 
}

これが役立つことを願っています。

于 2012-11-20T20:27:28.980 に答える
0

メソッド名は Text ではなくテキストです。大文字と小文字の区別は重要であり、T が小さいテキストを使用するとエラーが発生します。

于 2012-11-20T19:07:38.783 に答える