【发布时间】:2012-04-02 18:42:57
【问题描述】:
编辑:更新代码以反映 Paul.s 的建议。
过去一周一直在搜索 SO,但仍然无法让我的应用在 Sim 和 Device 中关闭/重新启动应用时保留应用内对设置的更改。
尝试从单例中使用 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 开窗,紧随其后的是一阵咒骂。好的,我对这次编辑比较冷静。我想轻轻摇晃 macbook pro 以表明我对 NSUserDefaults 不太满意 :-)
干杯
sc.
【问题讨论】:
-
你说你使用
registerDefaults:- 你有没有机会为gSettingsAreSet设置一个默认值,如果是这样,这将永远不会返回nilfor[[NSUserDefaults standardUserDefaults] stringForKey:@"gSettingsAreSet"];另外为什么这是一个字符串?这似乎是布尔值的完美用例...... -
嗨,保罗,是的,还为此设置了默认值。我同意它应该是 BOOL;一些早期调试/货物崇拜尝试的残余。我改用 BOOL 但无济于事。我想我需要把这一切都撕掉并重新开始。感谢您的回复!
-
我认为您应该坚持使用
registerDefaults:,因为它可以完成我认为您正在尝试做的事情。它不会从NSUserDefaults中擦除已保存的信息,仅在尚未设置任何内容时提供值... -
嗨,保罗,只用 registerDefaults 就撕掉了。恐怕没有运气。我相信我的问题源于实际更新值 - 即,不知何故我使用了这个错误 -> setBool:global.gWantFoo forKey:@"gWantFoo"
标签: objective-c ios nsuserdefaults