■はじめに
アプリケーションを作成している時に、データを永続的に保存したい場合など、良くありますよね?
※私はよくあります!!
そんな時に、いくつかデータを保存する方法があります。
その中でも今回は、「UserDefaults」について記載します。
(他にも、「CoreData」「SQLite」「NSKeyedArchiver」などありますが、ここでは説明を省きます。)
■UserDefaults
UserDefaultsは、データをplistファイルに保存する事でデータを永続的に保持する方法です。
データを保存する時には一旦データをメモリに保存した後に、非同期でplistファイルへ保存します。
アプリケーションの起動時には、plistファイルのデータを全てメモリ上に展開されます。
上記にも記載した通り、plistファイルのデータを全てメモリ上に展開されるため、データ量が多いと
メモリが足りなくなり、アプリケーションが強制終了する原因となります。
そのため、大量のデータを保存することには向いておらず、アプリケーション内の設定や、ユーザー情報などの
限られた情報のみを保存する用途で使用することをお勧めします。
※大量のデータを保存する時には、「CoreData」などを使用してください。
ちなみに、保存できる件数ですが、特に決まりはありません。
メモリが足りる限り保存できるみたいです。。。
【Appleの公式リファレンス】
https://developer.apple.com/documentation/foundation/userdefaults
UserDefaultsの具体的な使用方法は以下に記載します。
※NSUserDefaultsではなく、UserDefaultsの使用方法です。
※Swift3.0から「NSUserDefaults」が「UserDefaults」に変わりました。
◾️インスタンスの生成
UserDefaultsのインスタンスの生成方法は以下です。
このインスタンスを元にデータの保存や取得などの処理を行います。
// インスタンスの生成
let userDefaults = UserDefaults.standard
◾️データの保存(書き込み)
UserDefaultsのデータの保存方法は以下です。
特定の「Key」に対して、値を保存する形になります。
[UserDefaultsのインスタンス].set([設定する値], forKey: [設定する値のキー])
具体的な使用方法は以下です。
// インスタンスの生成
let userDefaults = UserDefaults.standard
// String型のデータの保存
userDefaults.set("TEST", forKey: "Key")
// Bool型のデータの保存
userDefaults.set(true, forKey: "Key")
// Int型のデータの保存
userDefaults.set(1, forKey: "Key")
◾️データの取得(読み込み)
UserDefaultsのデータの取得方法は以下です。
データの保存時に設定した特定の「Key」の値を取得します。
[UserDefaultsのインスタンス].[型](forKey: [設定する値のキー])
具体的な使用方法は以下です。
// インスタンスの生成
let userDefaults = UserDefaults.standard
// String型のデータの取得
userDefaults.string(forKey: "Key")
// Bool型のデータの取得
userDefaults.bool(forKey: "Key")
// Int型のデータの取得
userDefaults.integer(forKey: "Key")
◾️データの削除
UserDefaultsのデータの削除方法は以下です。
データの保存時に設定した特定の「Key」の値を削除します。
[UserDefaultsのインスタンス]. removeObject(forKey: [設定する値のキー])
具体的な使用方法は以下です。
// インスタンスの生成
let userDefaults = UserDefaults.standard
// 型に限らずデータの削除
userDefaults.removeObject(forKey: "Key")
◾️データの存在確認
UserDefaultsのデータの存在確認方法は以下です。
データの保存時に設定した特定の「Key」のデータの存在を確認します。
if [UserDefaultsのインスタンス].object(forKey: [設定する値のキー]) != nil {
// データがある場合はこちらの処理
} else {
// データがない場合はこちらの処理
}
具体的な使用方法は以下です。
// インスタンスの生成
let userDefaults = UserDefaults.standard
// 型に限らずデータの存在確認
if userDefaults.object(forKey: "Key") != nil {
// データがある場合はこちらの処理
} else {
// データがない場合はこちらの処理
}
◾️データの同期
UserDefaultsのデータの同期方法は以下です。
このデータの同期を行わないと、データの保存、データの削除が反映されない場合があります。
※UserDefaultsはデータを非同期でplistに反映するため。。。
※基本的には、データの保存、削除の時にはすぐ後にこの処理を入れておいた方が安全です。
[UserDefaultsのインスタンス].synchronize()
具体的な使用方法は以下です。
// インスタンスの生成
let userDefaults = UserDefaults.standard
// データの同期
userDefaults.synchronize()