在iOS中如何加载/保存设置

28

我在我的AppDelegate中定义了两个过程:saveSettings和loadSettings。我在AppDidFinishLaunching方法中调用我的loadSettings过程,在设置视图中点击保存按钮后调用saveSettings过程。

这两种方法似乎都是在正确的时间、正确的次数(一次)和使用正确的数据进行调用的。我的设置对象获取了正确的数据,但数据似乎并没有真正保存。当我运行加载代码时,返回的变量为空(不是nil)。

我尝试将相同的加载代码放在另一个视图中,它可以正常工作,但由于某些原因,我在appDelegate中无法获得结果。

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];
    [self loadSettings];
    [self setDefaults];
}

-(void)loadSettings{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    settings.masterLocation = [prefs objectForKey:@"masterLocation"];
    settings.masterPort = [prefs objectForKey:@"masterPort"];
    settings.userName = [prefs objectForKey:@"userName"];
    settings.passWord = [prefs objectForKey:@"passWord"];
    settings.autoLogin=[prefs objectForKey:@"autoLogin"];

    if (settings.autoLogin == nil)
        settings.autoLogin=@"N";
}

-(void)saveSettings:(SharedData *)d{
    settings=d;

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setObject:settings.masterLocation forKey:@"masterLocation"];
    [prefs setObject:settings.masterPort forKey:@"masterPort"];
    [prefs setObject:settings.userName forKey:@"userName"];
    [prefs setObject:settings.passWord forKey:@"passWord"];
    [prefs setObject:settings.autoLogin forKey:@"autoLogin"];   
}
2个回答

29

糟糕。

在 saveSettings 方法中,我忘记写 [prefs synchronize] 了。


感谢您获得了自学者徽章。 - Dutchie432
1
同步 - Manni
我简直不敢相信没有其他人注意到那个。干得好。 - Dutchie432
1
我最喜欢的存储处理方式 :D 谢谢 - WildWorld

1

使其简单:

//Writing
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"anInt"];
[[NSUserDefaults standardUserDefaults] setDouble:1.2 forKey:@"aDouble"];
[[NSUserDefaults standardUserDefaults] setString:@"aString" forKey:@"aString"];
[[NSUserDefaults standardUserDefaults] synchronize];

//Reading:

int i = [[NSUserDefaults standardUserDefaults] integerForKey:@"anInt"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接