代码之家  ›  专栏  ›  技术社区  ›  Dutchie432

在iOS中加载/保存设置

  •  28
  • Dutchie432  · 技术社区  · 15 年前

    我在AppDelegate中定义了以下两个过程。保存设置和加载设置。单击save按钮后,我将在AppDidFinishLaunching方法中调用我的loadSettings过程,并在我的settings视图中调用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 回复  |  直到 6 年前
        1
  •  29
  •   Dutchie432    14 年前

    Doh。

    在saveSettings中,我缺少[prefs synchronize];

        2
  •  1
  •   navins    11 年前

    //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"]