28

AppDelegate で定義されている次の 2 つの手順があります。saveSettings と loadSettings。AppDidFinishLaunching メソッドで loadSettings プロシージャを呼び出しています。保存ボタンをクリックすると、設定ビューで saveSettings プロシージャを呼び出しています。

どちらのメソッドも、適切なタイミングで適切な回数 (1 回) 呼び出され、正しいデータを使用しているように見えます。私の設定オブジェクトは正しいデータを取得しますが、データが実際に保存されていないようです。ロード コードを実行すると、結果の変数が空 (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"];   
}
4

2 に答える 2

29

どー。

saveSettings に [prefs synchronize] がありませんでした。

于 2009-04-23T16:17:48.363 に答える
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"]
于 2013-03-30T08:59:09.707 に答える