单击主页按钮后,AppDelegate值不会更改

时间:2013-01-08 09:50:05

标签: objective-c ios cocoa-touch appdelegate

我有一个非常奇怪的情况。

我正在使用AppDelegate:

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

并在那里保存不同的值以在应用程序之间共享。

e.g

@property (nonatomic, retain) NSString *campaignTitle;

我是第一次打开应用程序 - 我可以为属性分配值,并在应用程序生命周期中更改它们甚至一些时间。

e.g。

appDelegate.campaignTitle = theTitle;

但是,如果用户点击主页按钮,然后重新打开应用程序,如果我尝试分配新值 - 则appDelegate值不会更改并保留旧值。< / p>

有什么问题?

2 个答案:

答案 0 :(得分:2)

根据我的理解,您在appDelegate中保存的值仅存储在会话中。如果您关闭应用程序或重新打开应用程序,请确保您的数据仍然存在,请存储它们。

最简单的方法是使用 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"];

对于更复杂的情况,我建议 CoreData

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

答案 1 :(得分: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]];
}