-1

変数を別のビューに渡すと、常に「null」が返されます

コード画面1.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"gotoScreen2"])
    {
        Screen2 *screen = [[Screen2 alloc] initWithNibName:nil bundle:nil];
        Screen2.passedVar = currentVar;

        NSLog(@"%@",currentVar); //these 2 line both return the correct var!
        NSLog(@"%@",Screen2.passedVar);
    }
}

コードScreen2.h

@property (nonatomic,copy) NSString *passedVar;

コード画面2.m

@synthesize passedVar;
...
NSLog(@"%@",passedVar); //This returns 'null'
4

2 に答える 2

1

まず第一に、Screen2.passedVar = currentVar;クラスはインスタンス変数を持つことができないため、この行は正しくありません。しかし、この行を一見正しいscreen.passedVar = currentVar;と思われる に置き換えたとしても、期待どおりには機能しません。 

あなたの間違いは、目的のビュー コントローラーの新しいインスタンスを で作成していることScreen2ですperpareForSegue:sender:。システムはこのオブジェクトを無視するだけで、メソッドが戻ると削除されます。

Screen2セグエの実行を要求すると、システムは のインスタンスを作成します。パラメータをprepareForSegue:sender:介してこのインスタンスにアクセスします。segue

Screen2 *screen = (Screen2 *)segue.destinationViewController;
screen.passedVar = currentVar;
于 2013-08-24T14:31:49.750 に答える