NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
を使用して、
保存されたBOOL値を取得するには、BOOL boolFromPrefs = [defaults boolForKey:@"theBoolKey"];
のような呼び出しを使用します。
キーが見つからない場合は、NOが返されます(boolForKeyのデフォルトの動作)。
しかし...いいえ、保存した設定はできません。 intForKey
も同じ
それで、値を取得する前に、キーが存在するかどうかをどのようにテストできますか?
正しい方法で デフォルト値を登録 してください。
NSDictionary *userDefaultsDefaults = @{
@"SomeKey": @NO,
@"AnotherKey": @"FooBar",
@"NumberKey": @0,
};
[NSUserDefaults.standardUserDefaults registerDefaults:userDefaultsDefaults];
NSUserDefaults
から何かを使用する前にこれを行ってください。の始まり application:didFinishLaunchingWithOptions:
は安全な場所です。
アプリを起動するたびにデフォルトを登録する必要があります。 NSUserDefaultsは、明示的に設定された値のみを保存します。
デフォルト値を使用する場合、他の回答で提案されているように、「isFirstLaunch」キーのチェックを使用する必要はありません。
これは、更新をロールアウトし、NSUserDefaults
アイテムのデフォルト値を変更する場合に役立ちます。
BOOLに変換する前に、オブジェクトが存在するかどうかを確認してください。
if ([defaults objectForKey:@"theBoolKey"] != nil) {
boolFromPrefs = [defaults boolForKey:@"theBoolKey"];
} else {
boolFromPrefs = DEFAULT_BOOL_VALUE;
}
私はこのようにしました:
NSUserDefaults *prefs = NSUserDefaults.standardUserDefaults;
if ([[prefs dictionaryRepresentation].allKeys containsObject:@"yourKey"]) {
float yourValue = [prefs floatForKey:@"yourKey"];
}
objectForKey:
を使用してテストできます。それがnilの場合は設定されません。すべてのboolForKeyは、もしあればNSNumber
を返し、BOOL
値を返します。
アプリケーションで使用する可能性があるすべてのキーにデフォルト値を設定することをお勧めします。これは、application:didFinishLaunchingWithOptions:メソッドで行うことができます。これにより、各値が設定されたことがわかります。
ヒント、「defaultsSet」というキーをYESに設定して、これを1度だけ行うようにします。また、[[NSUserDefaults standardUserDefaults] synchronize]を呼び出して値を保存することを忘れないでください。
@Tim Autinの回答のSwiftバージョン:
if contains(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array, "chuiser_cook_orders_dirty") {
println("exist")
}
複雑にしないでください。
if([NSUserDefaults.standardUserDefaults objectForKey:@"yourBoolKey"])
{
// Object Already Stored in User defaults
}
else
{
//Object not stored
}
MarkPowellの回答に基づくSwiftの例
if (NSUserDefaults.standardUserDefaults().objectForKey("SomeBoolSetting") == nil) {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "SomeBoolSetting")
println("Bool WAS nil")
} else {
var boolValue:Bool? = NSUserDefaults.standardUserDefaults().boolForKey("SomeBoolSetting")
println("Bool WAS NOT nil \(boolValue)")
}