web-dev-qa-db-ja.com

NSUserDefaultsに値が含まれているかどうか?

NSUserDefaultsに値が含まれているかどうかを知る方法は?空かどうかを確認する方法は?

18
Aswathy Bose

NSUserDefaults内のオブジェクトが空であるかどうかを確認する方法はありません。ただし、特定のキーの値がnilであるかどうかを確認できます。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSObject * object = [prefs objectForKey:@"your_particular_key"];
if(object != nil){
   //object is there
}
55
Krishnabhadra
NSUserDefaults *data = [NSUserDefaults standardUserDefaults];  
NSString *string = [data objectForKey:@"yourKey"];
if(string==nil)
NSlog(@"nil")  

NSUserDefaultドキュメント を見てください

// For saving the values
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// saving an NSString
[userDefaults setObject:@"Ttest" forKey:@"key"];
// --- For Retrieving

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
// getting an NSString
NSString *myString = [userDefaults stringForKey:@"key"];
1
Parag Bafna

特定の値が設定されているかどうかを確認するには、その場所(グローバルまたはアプリケーション)に関係なく、-[NSUserDefaults objectForKey:]の戻り値を確認します。

id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"My-Key-Name"];
if (obj != nil) {...}

アプリケーション(バンドル)にユーザーのデフォルトで保存されている設定があるかどうかを確認するには:

NSUserDefaults* sdu = [NSUserDefaults standardUserDefaults];

NSString* bundleId = [[NSBundle mainBundle] bundleIdentifier];
NSDictionary* mainBundleSettings = [sdu persistentDomainForName:bundleId];

NSLog(@"%@", mainBundleSettings);

システムのグローバル設定を含め、-[NSUserDefaults objectForKey:]が何かを返す可能性のあるすべての値に関心がある場合は、

NSDictionary* allPossibleSettings = [sdu dictionaryRepresentation];

NSUserDefaultsが空になることはありません。これは、グローバル設定、バンドルの設定、一時データ、およびおそらく他の何かを組み合わせたものです。たとえば、次のように呼び出します。

[[NSUserDefaults standardUserDefaults] objectForKey:@"NSBoldSystemFont"]

アプリケーションがこの値を設定したことがない場合でも、グローバル設定から取得される@"LucidaGrande-Bold"文字列値を取得します。

0
hamstergene