文書   >   Foundation   >   Preferences   >   NSUserDefaults
クラス
NSUserDefaults
ユーザーのデフォルトデータベースとのインターフェイス。アプリの起動時にキー値のペアを永続的に保存します。
概要
NSUserDefaults クラスは、デフォルトシステムと対話するためのプログラム的なインターフェイスを提供します。デフォルトシステムでは、アプリはユーザーの環境設定に一致するように動作をカスタマイズできます。たとえば、ユーザーが希望する測定単位やメディアの再生速度をユーザーが指定できるようにできます。アプリは、ユーザーのデフォルトデータベースのパラメータセットに値を割り当てることによって、これらの環境設定を保管します。パラメータは、起動時のアプリのデフォルト状態やデフォルトでの動作を決定するために使用されるため、デフォルト と呼ばれます。
実行時に、NSUserDefaults オブジェクトを使用して、アプリがユーザーのデフォルトデータベースから使用するデフォルト値を読み取るようにします。NSUserDefaults は、デフォルト値が必要になるたびにユーザーのデフォルトデータベースを開く必要がないように、情報をキャッシュします。デフォルト値を設定すると、プロセス内で同期的にそれは変更され、永続的な格納や他のプロセスと非同期的に変更されます。
教育機関の管理されたデバイスを除き、ユーザーのデフォルトはローカルで 1 つのデバイス上に保存され、バックアップと復元のために保持されます。ユーザーに接続されたデバイス間で環境設定やその他のデータを同期するには、代わりに NSUbiquitousKeyValueStore を使用して下さい。
デフォルトオブジェクトの格納
NSUserDefaults クラスは、float、double、整数、ブール値、および URL などの一般的な型にアクセスするためのコンビニエンスメソッドを提供します。これらのメソッドについては、デフォルト値の設定 で説明しました。
デフォルトのオブジェクトは、NSData 、NSString、NSNumber、NSDate、NSArray、または NSDictionary のインスタンス (またはコレクション、インスタンスの組み合わせ) のプロパティリストでなければなりません。他の型のオブジェクトを格納する場合は、通常は NSData のインスタンスを作成するためにアーカイブする必要があります。
変更可能なオブジェクトを値として設定した場合でも、NSUserDefaults から返される値は不変です。たとえば、"MyStringDefault" の値として可変文字列を設定した場合、stringForKey: メソッドを使用しても後で取得する文字列は変更できません。変更可能な文字列をデフォルト値として設定して後で文字列を変更すると、setObject:forKey: を再度呼び出さない限り、デフォルト値は変更された文字列値を反映しません。
詳細については、環境設定と設定プログラミングガイド を参照してください。
ファイル参照の永続化
ファイルの URL は、ファイルシステム内の場所を指定します。setURL:forKey: メソッドを使用して特定のファイルの場所を保存し、ユーザーがそのファイルを移動すると、次回の起動時にはそのファイルを見つけることができない場合があります。ファイルシステム ID でファイルへの参照を格納するには、代わりに bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error: メソッドを使用して NSURL ブックマークデータを作成し、setObject:forKey: メソッドを使用して永続化します。次に、URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error: メソッドを使用して、ユーザーのデフォルトでファイルU RLに 格納されているブックマークデータを解決できます。
デフォルトの変更に対する応答
キー値監視を使用して、特定のデフォルト値に対する更新の通知を受けられます。また、ローカルのデフォルトデータベースへのすべての更新の通知を受けるために、defaultCenter 通知センターで NSUserDefaultsDidChangeNotification の監視者として登録することもできます。
詳細については、キー値監視プログラミングガイド および 通知プログラミングトピックス を参照してください。
管理下環境でのデフォルトの使用
あなたのアプリが管理下環境をサポートしている場合は、NSUserDefaults を使用して、管理者がユーザーの利益のために管理する環境設定がどれかを判断できます。コンピュータラボや教室などの管理下環境では、管理者または教師は、ユーザーのための一連のデフォルト環境設定を確立することによってシステムを構成できます。この方法で環境設定が管理されている場合 (管理下環境キーへのアクセス で説明したメソッドで判断されます)、コントロールを無効または非表示にしてユーザーがその環境設定を編集できないようにする必要があります。
詳細については、モバイルデバイス管理プロトコルリファレンス を参照してください。
教育機関で管理されているデバイス上で実行されているアプリは、iCloud のキー値保管を使用して、ユーザーの他のデバイス上の他のインスタンスと少量のデータを共有できます。例えば、教科書アプリは、ユーザーが読んでいる現在のページ番号を保存することができるので、起動時にアプリの他のインスタンスを同じページで開くことができます。
詳細については、環境設定と設定のプログラミングガイド 内の iCloud に環境設定を保存 を参照してください。
サンドボックスの考慮事項
サンドボックス化されたアプリは、以下の例外を除いて、他のアプリ用の環境設定にアクセスしたり変更することはできません。
- macOS と iOS のアプリの拡張機能
- macOS 上のあなたのアプリケーショングループ内の他のアプリ
addSuiteNamed: メソッドを使用してサードパーティのアプリのドメインを追加しても、あなたのアプリはそのアプリの環境設定にアクセスできません。別のアプリの環境設定にアクセスしたり変更したりしようとしても、エラーは発生しません。代わりに、macOS は他のアプリケーションの実際の環境設定ファイルではなく、あなたのアプリのコンテナ内にあるファイルを読み書きします。
スレッドセーフティ
UserDefaults クラスはスレッドセーフです。
トピックス
標準のユーザーデフォルトオブジェクトの取得
standardUserDefaults
共有デフォルトオブジェクトを返します。
ユーザーデフォルトオブジェクトの作成
- init
アプリと現在のユーザのデフォルト値で初期化されたユーザデフォルトオブジェクトを作成します。
- initWithSuiteName:
指定されたデータベース名のデフォルト値で初期化されたユーザーのデフォルトオブジェクトを作成します。
デフォルト値の取得
- objectForKey:
指定されたキーに関連したオブジェクトを返します。
- URLForKey:
指定されたキーに関連した URL を返します。
- arrayForKey:
指定されたキーに関連した配列を返します。
- dictionaryForKey:
指定されたキーに関連した dictionary オブジェクトを返します。
指定されたキーに関連した文字列を返します。
- stringArrayForKey:
指定されたキーに関連した文字列の配列を返します。
- dataForKey:
指定されたキーに関連した data オブジェクトを返します。
- boolForKey:
指定されたキーに関連したブール値を返します。
- integerForKey:
指定されたキーに関連した整数値を返します。
- floatForKey:
指定されたキーに関連した float 値を返します。
- doubleForKey:
指定されたキーに関連した double 値を返します。
- dictionaryRepresentation
検索リスト内のドメイン内のすべてのキー値のペアの和集合を含む辞書を返します。
デフォルト値の設定
- setObject:forKey:
指定されたデフォルトキーの値を設定します。
- setFloat:forKey:
指定されたデフォルトキーの値を、指定された float 値に設定します。
- setDouble:forKey:
指定されたデフォルトキーの値を double 値に設定します。
- setInteger:forKey:
指定されたデフォルトキーの値を指定された整数値に設定します。
- setBool:forKey:
指定されたデフォルトキーの値を、指定されたブール値に設定します。
- setURL:forKey:
指定されたデフォルトキーの値を指定された URL に設定します。
デフォルトの削除
- removeObjectForKey:
指定されたデフォルトキーの値を削除します。
スイートの維持
- addSuiteNamed:
指定されたドメイン名を受信者の検索リストに挿入します。
- removeSuiteNamed:
受信者の検索リストから指定されたドメイン名を削除します。
デフォルトの登録
- registerDefaults:
指定した辞書の内容を登録ドメインに追加します。
永続ドメインの維持
- persistentDomainForName:
指定されたドメインのデフォルトの辞書表現を返します。
- setPersistentDomain:forName:
指定した永続ドメインの辞書を設定します。
- removePersistentDomainForName:
指定した永続ドメインの内容をユーザーのデフォルトから削除します。
現在の永続ドメイン名の配列を返します。
  廃止  
揮発性ドメインの維持
volatileDomainNames
現在の揮発性ドメイン名。
- volatileDomainForName:
指定された揮発性ドメインの辞書を返します。
- setVolatileDomain:forName:
指定された揮発性ドメインの辞書を設定します。
- removeVolatileDomainForName:
指定された揮発性ドメインをユーザーのデフォルトから削除します。
管理された環境キーへのアクセス
- objectIsForcedForKey:
指定したキーが管理者によって管理されているかどうかを示すブール値を返します。
- objectIsForcedForKey:inDomain:
指定されたドメイン内のキーが管理者によって管理されているかどうかを示すブール値を返します。
ドメイン
NSArgumentDomain
アプリケーションの引数から解析されたデフォルトで構成されるドメイン。これらは、アプリケーションのコマンドライン呼び出し内に含まれる 1 つ以上の形式の -default 値 のペアです。
NSGlobalDomain
すべてのアプリケーションで表示されるデフォルトから成るドメイン。
NSRegistrationDomain
一時的なデフォルトのセットで構成されたドメインで、検索が常に成功することを保証するためにアプリケーションによってそれらの値が設定されます。
通知
NSUserDefaultsDidChangeNotification
ユーザーのデフォルトが現在のプロセス内で変更されたときに通知されます。
NSUserDefaultsSizeLimitExceededNotification
許可されているよりも多くのデータがユーザーのデフォルトに格納されている場合に通知されます。
NSUbiquitousUserDefaultsCompletedInitialSyncNotification
デバイスが iCloud アカウントに初めて接続されたとき、またはユーザーがプライマリの iCloud アカウントを切り替えるときに、ユビキタス (偏在性) デフォルトがデータのダウンロードを完了したときに通知されます。
NSUbiquitousUserDefaultsDidChangeAccountsNotification
ユーザーがプライマリの iCloud アカウントを変更したときに通知されます。
NSUbiquitousUserDefaultsNoCloudAccountNotification
クラウドのデフォルトが設定されているが、iCloud のユーザーがログインしていない場合に投稿されます。
遺産
指定されたユーザーアカウントのデフォルトで初期化されたユーザーデフォルトオブジェクトを作成します。
  廃止  
- synchronize
保留中の全ての非同期更新がデフォルト・データベースに送られるのを待ち、戻ります。このメソッドは不要で、使用しないでください。
+ resetStandardUserDefaults
このメソッドは効果がないので、使用しないでください。
言語に依存した情報定数
これらの定数は廃止されており、使用しないでください。