2
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:@"content", @"myKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"myKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"]);

ログ:

2012-12-17 17:09:05.062 browserHD[4075:c07] content 

なぜ結果値は「コンテンツ」なのですか?結果値「nil」が必要です。

4

2 に答える 2

2

はい。それで合っています...

これは完璧な解決策ではないかもしれません。しかし、問題を解決するために少し調整します。

このように使用すると機能します!!!

- (IBAction)set:(id)sender {
    NSMutableDictionary *aDict=[NSMutableDictionary new];
    [aDict setObject:_myText.stringValue forKey:@"key"];

    [[NSUserDefaults standardUserDefaults] registerDefaults:aDict];
}

- (IBAction)remove:(id)sender {
    NSMutableDictionary *aDict=[NSMutableDictionary new];
    [aDict setObject:@"null" forKey:@"key"];
    [[NSUserDefaults standardUserDefaults] registerDefaults:aDict];
}

- (IBAction)get:(id)sender {
    NSLog(@"-> %@",[[NSUserDefaults standardUserDefaults]objectForKey:@"key"]);
}
于 2012-12-17T10:04:10.817 に答える
0

registerDefaults は、setObject:forKey: または removeObjectForKey とは異なるユーザー デフォルトの「レベル」に影響します。これは、標準のユーザー デフォルトよりも高いレベルのグローバル ユーザー デフォルトに入ります。「グローバル」は、まだアプリに対してローカルであるため、誤称です。

この方法では、グローバル ユーザー デフォルトから値を削除することはできません。

Global Defaults (NSGlobalDomain) -> User Defaults (NSRegistrationDomain)

値がユーザー値にある場合は、グローバル値をオーバーライドします。そうでない場合は、Global Defaults の値が使用されます。値の追加と削除は、ユーザー デフォルト レベルにのみ影響します。

ユーザーデフォルトを削除すると、グローバルデフォルトが常に「輝く」ため、明らかにグローバルデフォルトを取り除くことはできません。ただし、「nil で置き換え」たいもののオブジェクト値を に設定できます[NSNull null]。次に、コードでこのケースをチェックします。デフォルトは nil で[NSNull null]あるか、値が設定されていないことがわかります。

于 2012-12-17T09:51:36.900 に答える