-1

当我将变量传递给另一个视图时,它总是返回“null”

代码Screen1.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;

代码Screen2.m

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

2 回答 2

1

首先,该行Screen2.passedVar = currentVar;不正确,因为类不能有实例变量。但是,即使您将这条线替换为看似正确的screen.passedVar = currentVar;,它也不会像您预期的那样工作。 

您的错误是您正在创建目标视图控制器的新Screen2实例perpareForSegue:sender:。系统将忽略此对象,并在方法返回时将其删除。

Screen2当您要求它执行 segue 时,系统将为您创建一个实例。prepareForSegue:sender:您可以通过segue参数访问此实例:

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

类不能有 ivars,并且您没有将 ivar 分配给对象(也称为类实例),而是分配给类本身,这没有意义。尝试这个:

Screen2 *screen = [[Screen2 alloc] initWithNibName:nil bundle:nil];
screen.passedVar = currentVar;
NSLog(@"%@",screen.passedVar);

还要记住,它screen指向一个新创建的Screen2对象,它与正在呈现的控制器没有任何关系。

于 2013-08-24T14:27:53.263 回答