编辑:根据Paul.s的建议更新了代码。
过去一周一直在Stack Overflow上搜寻,但仍然无法让我的应用程序在模拟器和设备中关闭/重新启动应用程序后保持设置更改。
尝试使用Singleton中的NSMutableDictionary,但我不认为这是问题所在。
a)在AppDelegate的applicationDidFinishLaunchingWithOptions中使用registerDefaults为应用程序设置初始默认值:
AppManager *global = [AppManager sharedInstance];
// set up the defaults.
global.gWantFoo = YES; // This is a BOOL which relates to a UISwitch
// #define kWantFoo @"gWantFoo"
global.globalSettingsDict = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:
[NSNumber numberWithBool:global.gWantFoo], kWantFoo, nil];
global.globalSettings = [NSUserDefaults standardUserDefaults];
[global.globalSettings registerDefaults:global.globalSettingsDict];
[global.globalSettings synchronize];
b) 在 ConfigView 中,我可以设置开关,在开关更改时,我让选择器执行以下操作。
self.global.gWantFoo = NOT(self.global.gWantFoo); // #define NOT(a) !(a)
[self.global.globalSettings setBool:self.global.gWantFoo forKey:kWantFoo];
[self.global.globalSettings synchronize];
c) 在applicationDidEnterBackground及其相关方法中,我有一个同步操作。尽管开关值在应用程序实例的生命周期内保持更改,但一旦我重新启动应用程序,gWantFoo就会被默认值"YES"覆盖。
感激任何建议。我几乎要用猛烈的咒骂将我的苹果笔记本电脑扔出窗外了。好吧,在这个编辑过程中我冷静了下来。我觉得轻轻摇晃MacBook Pro可以证明我对NSUserDefaults并不满意 :-)
干杯
sc.
registerDefaults:
- 你是否为gSettingsAreSet
设置了默认值?如果是这样,那么[[NSUserDefaults standardUserDefaults] stringForKey:@"gSettingsAreSet"];
将永远不会返回nil
。另外,为什么这是一个字符串?它似乎是布尔值的完美用例... - Paul.sregisterDefaults:
,因为它可以实现你想要的功能。它不会清除NSUserDefaults
中保存的信息,只有在没有设置值时才提供默认值... - Paul.s