2015-02-09 16 views
-3

我已經衝浪了很多。但是我得到的結果告訴我要麼使用appDelegate,要麼使用單身等。 所有這些都會產生相同的結果。即我可以在不同的ViewController中共享一個變量,但一旦ViewController被更改,變量就會失去它的值。 例如,我使用了一個名爲myVar類型爲int的變量。我在AppDelegate中聲明瞭它,然後我可以在AppDelegate的幫助下在所有ViewController中使用它。但只要我從A ViewController移動到B ViewController,myVar變量的值就會再次變爲「0」。我不想那樣。我想讓變量保持它的值。我不想在pushViewController等的幫助下傳遞這些數據。請給我一個好的解決方案。如何在Objective-C中共享變量及其值?

AppDelegate.h 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@property (strong, assign) int myVar; 

@end 

FirstViewController.m 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
AppDelegate* app = (AppDelegate*)[UIApplication sharedApplication].delegate; 

app.myVar = 1; 
NSLog(@"%d",app.myVar); //Shows "1" in Log 
} 


SecondViewController.m 

- (IBAction)pressButton:(id)sender{ 
AppDelegate * app = (AppDelegate*)[UIApplication sharedApplication].delegate; 

    NSLog(@"%d",app.myVar); // Shows "0" in Log (But I want it to show "1" as I have already set "myVar" value as "1" in my FirstViewController) 


} 
+0

我不明白你的要求。也許你可以展示一些代碼來演示這個問題? – Paulw11 2015-02-09 10:43:17

+0

發佈一些代碼,你必須做一些錯誤的事情,否則應用程序委託工作正常。 – 2015-02-09 10:45:26

+0

發佈了代碼 – Rahul 2015-02-09 10:49:46

回答

0

@property (strong, assign) int myVar;正在申報兩個strongassign。作爲一個整數,它應該只是assign,而不是strong。對於原始C屬性,strong將用於Objective-c對象,assign

我想你想要的是以下幾點:

@property (assign, nonatomic) int myVar;

+0

嘗試過,不起作用。 – Rahul 2015-02-09 11:18:14

+0

它可能沒有解決您的問題,但它仍然可以幫助您避免其他問題。 – ozz 2015-02-09 11:19:29

+0

是的,Thanx爲 – Rahul 2015-02-09 11:20:08

-1

如果你的var是一個NSString,你可以簡單地使用[copy]協議。例如

NSString * eString = [cString copy];

如果它是一個對象,則需要爲該類實現[copy]協議。

+1

很明顯,你根本沒有讀到這個問題。 – ozz 2015-02-09 11:21:25

0

首先檢查你的代碼有一些錯誤

AppDelegate.h 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@property (nonatomic, assign) int myVar; 

,並檢查它給出了相同的值在FirstViewController.m和SecondViewController.m

+0

我試過你的代碼,它不起作用。 – Rahul 2015-02-09 11:18:54

+0

你可以從https://www.dropbox.com/sh/s3yqezs99cfntt6/AABujBuP853KJEZRqzKajTkCa?dl=0下載代碼並檢查它。 它正在工作。 – Mahesh 2015-02-09 11:50:19