0

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

我正在像这样使用 AppDelegate:

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

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

例如

@property (nonatomic, retain) NSString *campaignTitle;

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

例如

appDelegate.campaignTitle = theTitle;

但是,如果用户单击 home button,然后重新打开应用程序,如果我尝试分配新值 - appDelegate 值不会更改并保留旧值。

怎么了?

4

2 回答 2

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

于 2013-01-08T09:57:21.740 回答
1

您不能以这种方式使用 AppDelegate。它不是作为持久存储而设计的。

如果要保存的数据很小,那么您应该使用 NSUserDefaults 来保存它。对于更复杂的事情,您应该使用 CoreData。

其次,您根本不应该使用 AppDelegate 来存储全局数据。使用单独的单例类来存储此类信息要好得多。然后,您可以封装数据的 get 和 set 方法,以便为您将它们放入 NSUserDefaults 中。

IE

SingletonClass.m

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

- (void)setCampaignTitle:(NSString*)campaignTitle
{
    [[NSUserDefaults standardUserDefaults] setObject:campaignTitle forKey:@"CampaignTitle"];
    [[NSUserDefaults standardUserDefaults] synchronize]];
}
于 2013-01-08T10:06:45.217 回答