【发布时间】:2014-03-31 05:39:23
【问题描述】:
我根据Apple documentation page 使用默认设置制作了自定义 plist 并在 SO 的 answer on question 的帮助下。
这是我的应用委托代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultSettings" ofType:@"plist"];
NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences];
// Override point for customization after application launch.
return YES;
}
我还创建了名称为 defaultSettings .plist 的 plist,并在此处存储了我的默认设置。
这是结构:
<dict>
<key>Sound</key>
<true/>
<key>Music</key>
<true/>
<key>Difficulty</key>
<integer>0</integer>
</dict>
在我的设置 VC 中,我从 plist 设置我的出口并在值更改时存储到 plist。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.soundSwitcher.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"Sound"];
....
self.difficultySelector.selectedSegmentIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"Difficulty"];
}
看起来不错,但 outlets 没有设置为我在属性列表本身中设置的默认值。
我也无法通过IBAction 方法更改此值
- (IBAction)switchSound:(UISwitch *)sender
{
[[NSUserDefaults standardUserDefaults] setBool:sender.isOn forKey:@"Sound"];
}
我做错了什么?
编辑: 我想提一下,如果我关闭设置视图控制器然后再次打开它,设置会在我离开时保存。 (所以,实际上所有的工作)。但是如果我重新启动我的应用程序,所有设置都会取消。
【问题讨论】:
-
你打电话给
synchronize吗?你所有的测试都连接到 Xcode 了吗?您是否在设置默认值以及尝试阅读它们时记录?你在用故事板吗?您是否尝试设置viewWillAppear:中的值? -
@Wain 不,但我现在就试试这个。是的,我的测试连接到 Xcode。是的,我记录(当我打开设置视图控制器时未设置值,例如所有布尔 = 否,整数 = 1,我的 plist 中有另一个集合)。是的,我使用故事板。不,我不会尝试在
viewWillAppear:中设置网点,但老实说,我不认为,我几乎可以肯定情况并非如此
标签: ios iphone objective-c settings nsuserdefaults