0

私はiOS開発に不慣れで、変数の受け渡しに関する多くのチュートリアルを読んだ後でも、あなたの助けが必要です。

私のPP.mファイルのこの関数:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {


if ([segue.identifier isEqualToString:@"Btn1Transport"])
{
   [segue.destinationViewController setMyData:(50)];
    NSLog(@"Transporter1");
}

if ([segue.identifier isEqualToString:@"Btn2Transport"])
{
   [segue.destinationViewController setMyData:(100)];
    NSLog(@"Transporter2");
}

}

これは私のCategory.mファイルにあります:

- (void)viewDidLoad{

[super viewDidLoad];

recipeLabel.text = @"Hello"; //for test, is working

}

-(void)setMyData:(int)myData
{

    NSLog(@"Happines %d",myData);
    NSString* result = [NSString stringWithFormat:@"%d", myData];
    recipeLabel.text = result; //not working
}

問題はNSLog(@ "Happines%d"、myData);の行にあります。私のデータは問題なく印刷されますが、recipeLabelに設定されません。それで、それが機能するかどうかをテストするために、recipeLabel.text =@"Hello";を作成しました。ラベルは問題ありません。私は何が間違っているのですか?そして、初心者の質問でごめんなさい。

4

1 に答える 1

3

いいえ、prepareForSegueイベントから直接TextLabelに書き込むことはできません。宛先のビュー・コントローラーがロードされるときに値が上書きされます...

デスティネーションビューコントローラで変数を設定してから、ラベルの値をデスティネーションビューコントローラのviewDidLoadイベントの変数の値と等しく設定して機能させる必要があります...

//The variable myIntVar is a private variable that should be declared in the header file as private 
- (void)viewDidLoad{

[super viewDidLoad];

recipeLabel.text = myIntVar; //set the value equal to the variable defined in the prepareForSeque
}

-(void)setMyData:(int)myData
{

    NSLog(@"Happines %d",myData);
    NSString* result = [NSString stringWithFormat:@"%d", myData];
    myIntVar = result; 
}
于 2012-09-02T08:56:48.180 に答える