2013-05-17 150 views
0

我有一個程序,帶有兩個窗口(兩者都由同一個類文件控制)和一個名爲PersonName1Window AWindow B的全局變量。上Window A有2個按鈕,其中一個:全局變量返回空

-(IBAction)setPersonName:(id)sender 
{ 
    PersonName1 = @"Tom"; 
} 

和從窗口A切換到窗口乙

上窗口B中的其他有一個按鈕,其作用:

- (IBAction)loadNames:(id)sender 
{ 
    NSLog(@"%@",PersonName1); 
} 

的問題是每當屏幕變化,當我點擊窗口B上的按鈕,NSlog返回(空)而不是「湯姆」。這是什麼造成的?從評論

的更多信息:

PersonName1宣佈在主ViewController.h文件爲這樣:

NSString* PersonName1; 

並在該文件藏漢屬性。

@property (nonatomic, retain) NSString *PersonName1; 

然後在ViewController.m文件中合成。問題中列出的兩個IBActions也都在ViewController.m文件中。

+1

你在哪裏定義了'P ersonName1'? –

+1

你稱之爲「窗口」是什麼? UIView的?的UIWindow?或UIViewController? –

+0

可能發生的事情是,您的全球正在被autorelease池彈出吃掉。不幸的是,這就是爲什麼在Objective C中使用全局變量的一個壞主意的原因之一。你可能想要考慮的是使用單例類來保存變量,然後在類中使用全局可用的機制該單身人士改變變量。 –

回答

0

我認爲你沒有將值傳遞給一個視圖控制器到另一個視圖控制器。

例如: 第一視圖控制器 具有全球價值的NSString * nameString。 像下面

@property (nonatomic, strong) NSString *PersonName1; 

第二視圖控制器 它具有全球性的字符串作爲的NSString * nameString 像下面

@property (nonatomic, strong) NSString *PersonName1; 

當你想傳遞值一個視圖控制器到另一個mean.do像下面一樣

SecoundViewController *SVC = [[SecoundViewController alloc]initWithNibName:@"nibName" bundle:nil]; 
SVC.PersonName1 = self.PersonName1; 
[self.navigationController pushViewController:SVC animated:YES]; 
0

對我來說,好像你必須點擊第一個窗口上的第一個按鈕來爲PersonName1分配值。如果你沒有點擊第一個按鈕,而是點擊第二個按鈕,那麼它將返回null,因爲PersonName1上的聲明只會在單擊第一個按鈕時發生。

+0

當我點擊第一個按鈕,然後是第二個按鈕時,NSlog返回NULL。 – user2383749