2012-02-09 9 views

答えて

53

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

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 

NSObject * object = [prefs objectForKey:@"your_particular_key"]; 
if(object != nil){ 
    //object is there 
} 
+0

ありがとう作品 –

+0

恐ろしい解決策... :) – Adi

1
NSUserDefaults *data = [NSUserDefaults standardUserDefaults]; 
NSString *string = [data objectForKey:@"yourKey"]; 
if(string==nil) 
NSlog(@"nil") 

特定の値が設定されているかどうかを確認するにはNSUserDefault documentation

// 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"]; 
+0

@Krishnabhadraのように、NULLではなくnilと比較する必要があります。 –

+0

@PhilippeSabourinありがとうございます。 NULLはvoid *、nilはidです。 –

0

を見てみましょうか、ない、ない(グローバルまたはアプリケーションの)その場所の問題では、-[NSUserDefaults objectForKey:]の戻り値をチェックします

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

アプリケーション(バンドル)にユーザーのデフォルトに格納されている設定があるかどうかを確認するには:あなたがシステムのグローバル設定を含む-[NSUserDefaults objectForKey:]が何かを返されているすべての可能な値、に興味がある場合は

NSUserDefaults* sdu = [NSUserDefaults standardUserDefaults]; 

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

NSLog(@"%@", mainBundleSettings); 

、単に

NSDictionary* allPossibleSettings = [sdu dictionaryRepresentation]; 

NSUserDefaultsが空になることはありません呼び出します。これは、グローバル設定、バンドルの設定、一時的なデータと多分何かを組み合わせています。たとえば、あなたが呼び出す場合:

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

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

関連する問題