文書   >   Foundation   >   Preferences   >   UserDefaults
クラス
UserDefaults
ユーザーのデフォルトデータベースとのインターフェイス。アプリの起動時を越えてキー値のペアを永続的に保存します。
概要
UserDefaults クラスは、デフォルトシステムと対話するためのプログラム的なインターフェイスを提供します。デフォルトシステムでは、アプリはユーザーの環境設定に一致するように動作をカスタマイズできます。たとえば、ユーザーが希望する測定単位やメディアの再生速度をユーザーが指定できるようにできます。アプリは、ユーザーのデフォルトデータベースのパラメータセットに値を割り当てることによって、これらの環境設定を保管します。パラメータは、起動時のアプリのデフォルト状態やデフォルトでの動作を決定するために使用されるため、デフォルト と呼ばれます。
実行時に、UserDefaults オブジェクトを使用して、アプリがユーザーのデフォルトデータベースから使用するデフォルト値を読み取るようにします。UserDefaults は、デフォルト値が必要になるたびにユーザーのデフォルトデータベースを開く必要がないように、情報をキャッシュします。デフォルト値を設定すると、プロセス内で同期的にそれは変更され、永続的な格納や他のプロセスと非同期的に変更されます。
教育機関の管理されたデバイスを除き、ユーザーのデフォルトはローカルで 1 つのデバイス上に保存され、バックアップと復元のために保持されます。ユーザーに接続されたデバイス間で環境設定やその他のデータを同期するには、代わりに NSUbiquitousKeyValueStore を使用して下さい。
デフォルトオブジェクトの格納
NSUserDefaults クラスは、float、double、整数、ブール値、および URL などの一般的な型にアクセスするためのコンビニエンスメソッドを提供します。これらのメソッドについては、デフォルト値の設定 で説明しました。
デフォルトのオブジェクトは、NSData 、NSString、NSNumber、NSDate、NSArray、または NSDictionary のインスタンス (またはコレクション、インスタンスの組み合わせ) のプロパティリストでなければなりません。他の型のオブジェクトを格納する場合は、通常は NSData のインスタンスを作成するためにアーカイブする必要があります。
変更可能なオブジェクトを値として設定した場合でも、UserDefaults から返される値は不変です。たとえば、"MyStringDefault" の値として可変文字列を設定した場合、string(forKey:) メソッドを使用しても後で取得する文字列は変更できません。変更可能な文字列をデフォルト値として設定して後で文字列を変更すると、set(_:forKey:) を再度呼び出さない限り、デフォルト値は変更された文字列値を反映しません。
詳細については、環境設定と設定プログラミングガイド を参照してください。
ファイル参照の永続化
ファイルの URL は、ファイルシステム内の場所を指定します。set(_:forKey:) メソッドを使用して特定のファイルの場所を保存し、ユーザーがそのファイルを移動すると、次回の起動時にはそのファイルを見つけることができない場合があります。ファイルシステム ID でファイルへの参照を格納するには、代わりに bookmarkData(options:includingResourceValuesForKeys:relativeTo:) メソッドを使用して NSURL ブックマークデータを作成し、set(_:forKey:) メソッドを使用して永続化します。次に、 URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error: メソッドを使用して、ユーザーのデフォルトでファイル URLに 格納されているブックマークデータを解決できます。
デフォルトの変更に対する応答
キー値監視を使用して、特定のデフォルト値に対する更新の通知を受けられます。また、ローカルのデフォルトデータベースへのすべての更新の通知を受けるために、default 通知センターで didChangeNotification の監視者として登録することもできます。
詳細については、キー値監視プログラミングガイド および 通知プログラミングトピックス を参照してください。
管理下環境でのデフォルトの使用
あなたのアプリが管理下環境をサポートしている場合は、UserDefaults を使用して、管理者がユーザーの利益のために管理する環境設定がどれかを判断できます。コンピュータラボや教室などの管理下環境では、管理者または教師は、ユーザーのための一連のデフォルト環境設定を確立することによってシステムを構成できます。この方法で環境設定が管理されている場合 (管理下環境キーへのアクセス で説明したメソッドで判断されます)、コントロールを無効または非表示にしてユーザーがその環境設定を編集できないようにする必要があります。
詳細については、モバイルデバイス管理プロトコルリファレンス を参照してください。
教育機関で管理されているデバイス上で実行されているアプリは、iCloud のキー値保管を使用して、ユーザーの他のデバイス上の他のインスタンスと少量のデータを共有できます。例えば、教科書アプリは、ユーザーが読んでいる現在のページ番号を保存することができるので、起動時にアプリの他のインスタンスを同じページで開くことができます。
詳細については、環境設定と設定のプログラミングガイド 内の iCloud に環境設定を保存 を参照してください。
サンドボックスの考慮事項
サンドボックス化されたアプリは、以下の例外を除いて、他のアプリ用の環境設定にアクセスしたり変更することはできません。
- macOS と iOS のアプリの拡張機能
- macOS 上のあなたのアプリケーショングループ内の他のアプリ
addSuite(named:) メソッドを使用してサードパーティのアプリのドメインを追加しても、あなたのアプリはそのアプリの環境設定にアクセスできません。別のアプリの環境設定にアクセスしたり変更したりしようとしても、エラーは発生しません。代わりに、macOS は他のアプリケーションの実際の環境設定ファイルではなく、あなたのアプリのコンテナ内にあるファイルを読み書きします。
スレッドセーフティ
UserDefaults クラスはスレッドセーフです。
トピックス
標準のユーザーデフォルトオブジェクトの取得
class var standard: UserDefaults
共有デフォルトオブジェクトを返します。
ユーザーデフォルトオブジェクトの作成
アプリと現在のユーザのデフォルト値で初期化されたユーザデフォルトオブジェクトを作成します。
指定されたデータベース名のデフォルト値で初期化されたユーザーのデフォルトオブジェクトを作成します。
デフォルト値の取得
指定されたキーに関連したオブジェクトを返します。
指定されたキーに関連した URL を返します。
指定されたキーに関連した配列を返します。
func dictionary(forKey: String)
指定されたキーに関連した dictionary オブジェクトを返します。
指定されたキーに関連した文字列を返します。
func stringArray(forKey: String)
指定されたキーに関連した文字列の配列を返します。
指定されたキーに関連した data オブジェクトを返します。
指定されたキーに関連したブール値を返します。
指定されたキーに関連した整数値を返します。
指定されたキーに関連した float 値を返します。
指定されたキーに関連した double 値を返します。
func dictionaryRepresentation()
検索リスト内のドメイン内のすべてのキー値のペアの和集合を含む辞書を返します。
デフォルト値の設定
func set(Any?, forKey: String)
指定されたデフォルトキーの値を設定します。
func set(Float, forKey: String)
指定されたデフォルトキーの値を、指定された float 値に設定します。
func set(Double, forKey: String)
指定されたデフォルトキーの値を double 値に設定します。
指定されたデフォルトキーの値を指定された整数値に設定します。
func set(Bool, forKey: String)
指定されたデフォルトキーの値を、指定されたブール値に設定します。
func set(URL?, forKey: String)
指定されたデフォルトキーの値を指定された URL に設定します。
デフォルトの削除
func removeObject(forKey: String)
指定されたデフォルトキーの値を削除します。
スイートの維持
指定されたドメイン名を受信者の検索リストに挿入します。
func removeSuite(named: String)
受信者の検索リストから指定されたドメイン名を削除します。
デフォルトの登録
func register(defaults: [String : Any])
指定した辞書の内容を登録ドメインに追加します。
永続ドメインの維持
func persistentDomain(forName: String)
指定されたドメインのデフォルトの辞書表現を返します。
func setPersistentDomain([String : Any], forName: String)
指定した永続ドメインの辞書を設定します。
func removePersistentDomain(forName: String)
指定した永続ドメインの内容をユーザーのデフォルトから削除します。
現在の永続ドメイン名の配列を返します。
  廃止  
揮発性ドメインの維持
var volatileDomainNames: [String]
現在の揮発性ドメイン名。
func volatileDomain(forName: String)
指定された揮発性ドメインの辞書を返します。
func setVolatileDomain([String : Any], forName: String)
指定された揮発性ドメインの辞書を設定します。
func removeVolatileDomain(forName: String)
指定された揮発性ドメインをユーザーのデフォルトから削除します。
管理下環境キーへのアクセス
func objectIsForced(forKey: String)
指定したキーが管理者によって管理されているかどうかを示すブール値を返します。
func objectIsForced(forKey: String, inDomain: String)
指定されたドメイン内のキーが管理者によって管理されているかどうかを示すブール値を返します。
ドメイン
class let argumentDomain: String
アプリケーションの引数から解析されたデフォルトで構成されるドメイン。これらは、アプリケーションのコマンドライン呼び出し内に含まれる 1 つ以上の形式の -default 値 のペアです。
class let globalDomain: String
すべてのアプリケーションで表示されるデフォルトら成るドメイン。
class let registrationDomain: String
一時的なデフォルトのセットで構成されたドメインで、検索によって常に成功することを保証するためにアプリケーションによってその値が設定されます。
通知
class let didChangeNotification: NSNotification.Name
ユーザーのデフォルトが現在のプロセス内で変更されたときに通知されます。
class let sizeLimitExceededNotification: NSNotification.Name
許可されているよりも多くのデータがユーザーのデフォルトに格納されている場合に通知されます。
class let completedInitialCloudSyncNotification: NSNotification.Name
デバイスが iCloud アカウントに初めて接続されたとき、またはユーザーがプライマリの iCloud アカウントを切り替えるときに、ユビキタス (偏在性) デフォルトがデータのダウンロードを完了したときに通知されます。
class let didChangeCloudAccountsNotification: NSNotification.Name
ユーザーがプライマリの iCloud アカウントを変更したときに通知されます。
class let noCloudAccountNotification: NSNotification.Name
クラウドのデフォルトが設定されているが、iCloud のユーザーがログインしていない場合に通知されます。
遺産
指定されたユーザーアカウントのデフォルトで初期化されたユーザーデフォルトオブジェクトを作成します。
  廃止  
保留中の全ての非同期更新がデフォルト・データベースに送られるのを待ち、戻ります。このメソッドは不要で、使用しないでください。
class func resetStandardUserDefaults()
このメソッドは効果がないので、使用しないでください。
関連
以下からの継承
以下への準拠
CVarArg
Equatable
Hashable