2013-08-24 57 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對象,它不會有什麼做與正在呈現的控制器。