当我将变量传递给另一个视图时,它总是返回'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'
答案 0 :(得分:1)
首先,行Screen2.passedVar = currentVar;
不正确,因为类不能有实例变量。但即使你用看似正确的screen.passedVar = currentVar;
替换了这一行,它也不会像你期望的那样工作。
您的错误是您正在Screen2
中创建目标视图控制器perpareForSegue:sender:
的新实例。系统将忽略此对象,并在方法返回时将其删除。
当您要求它执行segue时,系统会为您创建Screen2
的实例。您可以通过prepareForSegue:sender:
参数在segue
中访问此实例:
Screen2 *screen = (Screen2 *)segue.destinationViewController;
screen.passedVar = currentVar;
答案 1 :(得分:0)
类不能有ivars,并且你没有将ivar分配给对象(也就是类实例),而是分配给没有意义的类本身。试试这个:
Screen2 *screen = [[Screen2 alloc] initWithNibName:nil bundle:nil];
screen.passedVar = currentVar;
NSLog(@"%@",screen.passedVar);
还要记住screen
指向新创建的Screen2
对象,它与正在呈现的控制器没有任何关系。