2013-01-08 43 views
0

我有一個非常奇怪的情況。點擊主頁按鈕後,AppDelegate值不會更改

我使用的AppDelegate這樣的:

appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

,並保存不同的值有應用程序之間共享。

e.g

@property (nonatomic, retain) NSString *campaignTitle; 

我的用戶打開的應用程序第一次 - 我可以將值分配的屬性和應用程序生命週期過程中改變他們甚至幾個時間。

例如

appDelegate.campaignTitle = theTitle; 

然而,如果用戶點擊home鍵,然後重新運行結束的應用程序,如果我嘗試分配新值 - 該值的appDelegate不改變,留在舊的。

出了什麼問題?

+0

你(例如NSUserDefaults的中)的某處存儲這些值? – tilo

+0

不,我可以保存在NSUserDefaults中 - 但爲什麼?它不應該與appdelegate一起工作嗎? – Dejell

回答

1

不能使用的AppDelegate這樣。它不是作爲一個持久存儲設計的。

如果要保存的數據只是很小,那麼您應該使用NSUserDefaults來保存它。對於任何更復雜的事情,你應該使用CoreData。

其次,你不應該使用AppDelegate存儲全局數據。使用單獨的單例類來存儲這種類型的信息是更好的做法。然後,您可以封裝數據的get和set方法,將它們放入NSUserDefaults中。

SingletonClass.m 

- (NSString*)campaignTitle 
{ 
    return [[NSUserDefaults standardUserDefaults] objectForKey:@"CampaignTitle"]; 
} 

- (void)setCampaignTitle:(NSString*)campaignTitle 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:campaignTitle forKey:@"CampaignTitle"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]]; 
} 
+0

我會嘗試一下,看看它是否有效 – Dejell

+0

你可以把這段代碼放到AppDelegate(而不是屬性)中,但最好放入一個獨立的單例中。首先嚐試在AppDelegate中。 – Fogmeister

2

對於我的理解,您保存在appDelegate中的值僅存儲在會話中。如果您關閉應用或重新打開應用,請確保您的數據將持續存儲。

對於更復雜的情況下,我會建議CoreData這樣做的最簡單的方法是使用NSUserDefaults的

//store the integer 35 for the key "ageKey" 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setInteger:35 forKey:@"ageKey"]; 
... 
//retrieve the data from the key "ageKey" 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSInteger age = [defaults integerForKey:@"ageKey"]; 

http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/cdProgrammingGuide.html