我有一个非常奇怪的情况。
我正在使用AppDelegate:
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
并在那里保存不同的值以在应用程序之间共享。
e.g
@property (nonatomic, retain) NSString *campaignTitle;
我是第一次打开应用程序 - 我可以为属性分配值,并在应用程序生命周期中更改它们甚至一些时间。
e.g。
appDelegate.campaignTitle = theTitle;
但是,如果用户点击主页按钮,然后重新打开应用程序,如果我尝试分配新值 - 则appDelegate值不会更改并保留旧值。< / p>
有什么问题?
答案 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 :
答案 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]];
}