215

私は小さなiPhoneアプリに取り組んでおりNSUserDefaults、データの永続性として使用しています。名前や番号など、いくつかのことを追跡するだけでよいので、単純にしたほうがいいと思います。

参考までにこのページを見つけましたが、私の質問に答えられるとは思いません。基本的に、に値(またはキー)がすでに存在するかどうかを確認し、NSUserDefaultsそれに応じて何かを実行できるようにしたいと思います。

いくつかの例:アプリが起動します。これが初めて起動する場合は、ようこそというアラートを出力します。これが初めて開いたかどうかを確認するために、を読み取り、UserDefaultsチェックします。

例2:「Hello [Name]」と表示されます。ここで、Nameは入力したものです。アプリを開いたときに名前がない場合は、「HelloWorld」と表示されます。すでに名前を入力しているかどうかを確認し、それに応じて行動する必要があります。名前はに保存されNSUserDefaultsます。

ここで助けがありますか?本当にありがたいです!

4

11 に答える 11

393

objectForKey:nil存在しない場合は戻ります。

于 2009-12-27T01:31:16.670 に答える
58

値が存在しない場合、メソッドobjectForKey:は戻ります。nil値が nil かどうかを示す単純な IF / THEN テストを次に示します。

if([[NSUserDefaults standardUserDefaults] objectForKey:@"YOUR_KEY"] != nil) {
    ...
}
于 2011-02-10T19:32:59.293 に答える
6

スウィフト 3 / 4:

これは、UserDefaults を介してアクセスされる他の型の Optional-return 動作を模倣する Int/Double/Float/Bool キー値型の単純な拡張です。

( 2018 年 8 月 30 日編集: Leo の提案からより効率的な構文で更新されました。)

extension UserDefaults {
    /// Convenience method to wrap the built-in .integer(forKey:) method in an optional returning nil if the key doesn't exist.
    func integerOptional(forKey: String) -> Int? {
        return self.object(forKey: forKey) as? Int
    }
    /// Convenience method to wrap the built-in .double(forKey:) method in an optional returning nil if the key doesn't exist.
    func doubleOptional(forKey: String) -> Double? {
        return self.object(forKey: forKey) as? Double
    }
    /// Convenience method to wrap the built-in .float(forKey:) method in an optional returning nil if the key doesn't exist.
    func floatOptional(forKey: String) -> Float? {
        return self.object(forKey: forKey) as? Float
    }
    /// Convenience method to wrap the built-in .bool(forKey:) method in an optional returning nil if the key doesn't exist.
    func boolOptional(forKey: String) -> Bool? {
        return self.object(forKey: forKey) as? Bool
    }
}

他の組み込み get メソッド (文字列、データなど) との一貫性が向上しました。古いメソッドの代わりに get メソッドを使用するだけです。

let AppDefaults = UserDefaults.standard

// assuming the key "Test" does not exist...

// old:
print(AppDefaults.integer(forKey: "Test")) // == 0
// new:
print(AppDefaults.integerOptional(forKey: "Test")) // == nil
于 2016-06-30T05:42:02.443 に答える
3

取得する Swift バージョンBool?

NSUserDefaults.standardUserDefaults().objectForKey(DefaultsIsGiver) as? Bool
于 2016-03-17T17:14:07.923 に答える