0

わかりました。私はobj-cを初めて使用し、Windows開発のバックグラウンドを持っているので、Regeditに対応するものを探しています。

NSUserDefaultsを使用する必要があることを理解しましたよね?

そこで、設定用と値取得用の2つの関数を作成しました。彼らはこのように見えます:(そしてそうです...私の愚かな関数名を無視してください):)

//SET:
-(void)SetRegeditValue:(NSString*)Name:(NSString*)Value
{
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:Value,Name, nil];
    [ud registerDefaults:dict];
}
//GET:
-(NSString*)GetRegeditValue:(NSString *)Name
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *get = [prefs stringForKey:Name];

    if(get)
        return get;
    else
        return @"Not found!";
}

そして、私はこれらを次のように使用します:

//TO SET:
SetRegitValue:@"my_value":@"my_value_name";
//TO GET:
GetRegeditName:@"my_value_name";

これが「正しい」方法かどうかはわかりませんが、機能します。唯一のことは、アプリを強制終了すると、これらの値が記憶されず、「見つかりません!」と表示されることです。これらの変数を本当に保存するように設定する必要があるものはありますか?

ああ、私はココアアプリケーションを構築しています。

4

2 に答える 2

2

このregisterDefaults:メソッドは、未定義のキーを要求したときに返されるデフォルト値を割り当てるために使用されます。実際に値を保存するには、いずれかの方法を使用する必要がありset*:forKey:ます。具体的には、setObject:forKey:オブジェクトである文字列を保存するため、を使用する必要があります。

- (void)SetRegeditValue:(NSString *)name :(NSString *)value {
    [[NSUserDefaults standardUserDefaults] setObject:value forKey:name];
}

コードと同じ引数の順序を使用しましたが、最初に値を渡した例とは一致しないことに注意してください。

于 2012-11-19T18:41:22.913 に答える
0

synchronizeNSUserDefaultsのメソッドのドキュメントには、 「永続ドメインへの変更をディスクに書き込む」と記載されています。...および... 「このメソッドは定期的に自動的に呼び出されるため、このメソッドは、自動同期を待つことができない場合(たとえば、アプリケーションが終了しようとしている場合)にのみ使用してください。 」

問題が発生したときにアプリを強制終了していると言っているので、明示的な同期が必要なカテゴリに属している可能性があります。

于 2012-11-19T18:39:00.673 に答える