2013-08-24 56 views
-1

当我传递变量到另一个视图,它总是返回 'NULL'传递的变量返回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' 

回答

1

首先,行Screen2.passedVar = currentVar;不正确,因为类不能有实例变量。但即使你用看起来正确的screen.passedVar = currentVar;取代了这条线,它也不会像你期望的那样工作。

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

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

Screen2 *screen = (Screen2 *)segue.destinationViewController; 
screen.passedVar = currentVar; 
0

类不能有ivars,而且你没有把伊娃分配给对象(又名类实例),而是分配给类本身,这没有意义。试试这个:

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

还记得screen指向一个新创建的Screen2对象,它不会有什么做与正在呈现的控制器。