Xamarin でのユーザーの既定値の使用Working with User Defaults in Xamarin.iOS

この記事では、NSUserDefault を使用して Xamarin iOS アプリまたは拡張機能に既定の設定を保存する方法について説明します。This article covers working with NSUserDefault to save default settings in a Xamarin.iOS App or Extension.

クラスを使用 NSUserDefaults すると、IOS アプリと拡張機能がシステム全体の既定のシステムとプログラムを使用して対話することができます。The NSUserDefaults class provides a way for iOS Apps and Extensions to programmatically interact with the system-wide Defaults System. ユーザーは、既定のシステムを使用して、アプリの動作またはスタイル設定 (アプリの設計に基づく) を構成できます。By using the Defaults System, the user can configure an app's behavior or styling to meet their preferences (based on the design of the app). たとえば、メトリックと英国の測定値にデータを表示したり、特定の UI テーマを選択したりすることができます。For example, to present data in Metric vs Imperial measurements or select a given UI Theme.

アプリグループで使用すると、には、 NSUserDefaults 特定のグループ内のアプリ (または拡張機能) 間で通信する手段も用意されています。When used with App Groups, NSUserDefaults also provides a way to communicate between apps (or Extensions) within a given group.

ユーザーの既定値についてAbout User Defaults

前述のように、ユーザーの既定値 ( NSUserDefaults ) をアプリ (または拡張機能) に追加し、エンドユーザーが実行時にアプリの外観や操作を調整するために変更できる構成可能なオプションを提供するために使用できます。As stated above, User Defaults (NSUserDefaults) can be added to an App (or Extension) and used to provide configurable options that the end user can modify to adjust the look or operation of the app at runtime.

アプリが初めて実行されるときに、は、 NSUserDefaults アプリのユーザーの既定のデータベースからキーと値を読み取り、メモリにキャッシュして、値が必要になるたびにデータベースを開いたり読み取りたりしないようにします。When your app first executes, NSUserDefaults reads the keys and values from the app's User Defaults Database and caches them to memory to avoid opening and reading the database each time a value is required.

重要

Apple では、開発者がメソッドを呼び出して、 Synchronize メモリ内キャッシュをデータベースと直接同期することを推奨していません。Apple no longer recommends that the developer call the Synchronize method to sync the in-memory cache with the database directly. 代わりに、メモリ内キャッシュとユーザーの既定のデータベースとの同期を維持するために、定期的に自動的に呼び出されます。Instead, it will be automatically called at periodic intervals to keep the in-memory cache in sync with a user’s defaults database.

クラスには、 NSUserDefaults string、integer、float、boolean、url などの一般的なデータ型の設定値の読み取りと書き込みを行うための便利なメソッドがいくつか含まれています。The NSUserDefaults class contains several convenience methods for reading and writing preference values for common data types such as: string, integer, float, boolean and URLs. 他の種類のデータは、を使用してアーカイブし NSData た後、ユーザーの既定のデータベースに対して読み取りまたは書き込みを行うことができます。Other types of data can be archived using NSData, then read from or written to the User Defaults Database. 詳細については、Apple の「 基本設定と設定のプログラミングガイド」を参照してください。For more information, please see Apple's Preferences and Settings Programming Guide.

共有 NSUserDefaults インスタンスへのアクセスAccessing the Shared NSUserDefaults Instance

共有ユーザーの既定のインスタンスは、デバイスの現在のユーザーの既定のアクセスを提供します。The Shared User Defaults Instance provides access to the User Defaults for the current user of the device. 共有の既定オブジェクトが存在しない場合は、最初にアクセスされ、次の情報で初期化されるときに、そのオブジェクトが作成されます。If the Shared Defaults object doesn't exist, it is created the first time it is accessed and initialized with the following information:

  • NSArgumentDomain現在のアプリから解析された既定値で構成される。An NSArgumentDomain consisting of the defaults parsed from the current app.
  • アプリのバンドル識別子ドメイン。The app's Bundle Identifier domain.
  • NSGlobalDomainすべてのアプリで共有される既定値で構成される。An NSGlobalDomain consisting of the defaults shared by all apps.
  • ユーザーの優先言語ごとに個別のドメイン。A separate domain for each of the user's preferred languages.
  • NSRegistrationDomain検索が常に成功するようにアプリによって変更できる一時的な既定のセットを持つ。An NSRegistrationDomain with a set of temporary defaults that can be modified by the app to ensure searches are always successful.

共有ユーザーの既定のインスタンスにアクセスするには、次のコードを使用します。To access the Shared User Defaults Instance, use the following code:

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;

アプリグループの NSUserDefaults インスタンスにアクセスしていますAccessing an App Group NSUserDefaults Instance

前述のように、アプリグループを使用すると、を使用して、 NSUserDefaults 特定のグループ内のアプリ (または拡張機能) 間の通信を行うことができます。As stated above, by using App Groups, NSUserDefaults can be used to communicate between Apps (or Extensions) within a given group. 最初に、 IOS デベロッパーセンターの [ Certificates, identifier & Profiles ] セクションで、アプリグループと必要なアプリ id が適切に構成されていること、および開発環境にインストールされていることを確認する必要があります。First, you will need to ensure that the App Group and the required App IDs have been properly configured in the Certificates, Identifiers & Profiles section on iOS Dev Center and have been installed in the development environment.

次に、アプリまたは拡張機能プロジェクトに、上で作成した有効なアプリ Id の1つが必要です。また、アプリグループが有効になっていて、 Entitlements.plist 指定されたアプリバンドルにファイルが含まれている必要があります。Next, your App and/or Extension projects need to have one of the valid App IDs created above, and the Entitlements.plist file has to be included in the App Bundle with the App Groups enabled and specified.

このすべてが整ったら、次のコードを使用して、共有アプリグループのユーザーの既定値にアクセスできます。With this all in place, the shared App Group User Defaults can be accessed using the following code:

// Get App Group User Defaults
var plist = new NSUserDefaults ("group.com.xamarin.todaysharing", NSUserDefaultsType.SuiteName);

ここ group.com.xamarin.todaysharing で、は、[証明書] で作成されたアプリグループです。 [識別子] は、アクセスする & プロファイル です。Where group.com.xamarin.todaysharing is the App Group created in Certificates, Identifiers & Profiles that you want to access. 詳細については、 アプリグループ機能 のドキュメントを参照してください。For more information, please see the App Group Capabilities documentation.

既定値の読み取りReading Default Values

目的のユーザーの既定のデータベースにアクセスした後、キーと値のペアを使用して既定値の値を読み取ることができます。また、読み取るデータの種類に基づいていくつかの便利な方法を使用することもできます。After you have accessed the desired User Default Database, you can read values from the defaults using Key/Value Pairs and several convenience methods based on the type of data being read:

  • ArrayForKey -指定されたキー値のの配列を返し NSObjects ます。ArrayForKey - Returns an array of NSObjects for the given key value.
  • BoolForKey -指定されたキーのブール値を返します。BoolForKey - Returns a boolean value for the given key.
  • DataForKey - NSData 指定されたキーのオブジェクトを返します。DataForKey - Returns an NSData object for the given key.
  • DictionaryForKey - NSDictionary 指定されたキーのを返します。DictionaryForKey - Returns an NSDictionary for the given key.
  • DoubleForKey -指定されたキーの double 型の値を返します。DoubleForKey - Returns a double value for the given key.
  • FloatForKey -指定されたキーの float 値を返します。FloatForKey - Returns a float value for the given key.
  • IntForKey -指定されたキーの整数値を返します。IntForKey - Returns an integer value for the given key.
  • StringArrayForKey -指定された String キー値からオブジェクトの配列を返します。StringArrayForKey - Returns an array of String objects from the given key value.
  • StringForKey -指定されたキーの文字列値を返します。StringForKey - Returns a string value for the given key.
  • URLForKey - NSUrl 指定されたキーの値を返します。URLForKey - Returns an NSUrl value for the given key.

たとえば、次のコードは、ユーザーの既定値からブール値を読み取ります。For example, the following code would read a boolean value from the User Defaults:

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;
...

// Get value
var useHeader = plist.BoolForKey("UseHeader");

既定値の書き込みWriting Default Values

上記の値を読み取るのと同様に、目的のユーザーの既定のデータベースにアクセスした後、キーと値のペアを使用して既定値に値を書き込むことができ、記述されるデータの種類に基づいていくつかの便利な方法があります。Just like reading values above, after you have accessed the desired User Default Database, you can write values to the defaults using Key/Value Pairs and several convenience methods based on the type of data being written:

  • SetBool -指定されたキーに指定されたブール値を書き込みます。SetBool - Writes the given boolean value to the given key.
  • SetDouble -指定されたキーに指定された double 値を書き込みます。SetDouble - Writes the given double value to the given key.
  • SetFloat -指定された float 値を指定されたキーに書き込みます。SetFloat - Writes the given float value to the given key.
  • SetString -指定されたキーに指定された文字列値を書き込みます。SetString - Writes the given string value to the given key.
  • SetURL -指定された URL ( NSUrl ) 値を指定されたキーに書き込みます。SetURL - Writes the given URL (NSUrl) value to the given key.

たとえば、次のコードは、ユーザーの既定値にブール値を書き込みます。For example, the following code would write a boolean value to the User Defaults:

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;
...

// Save value
plist.SetBool(useHeader, "UseHeader");
...

重要

アプリが初めて実行されるときに、は、 NSUserDefaults アプリのユーザーの既定のデータベースからキーと値を読み取り、メモリにキャッシュして、値が必要になるたびにデータベースを開いたり読み取りたりしないようにします。When your App first executes, NSUserDefaults reads the keys and values from the app's User Defaults Database and caches them to memory to avoid opening and reading the database each time a value is required.

まとめSummary

この記事では、 NSUserDefaults クラスについて説明し、エンドユーザーが Xamarin IOS アプリを構成するために使用できる一連のオプションを提供する方法について説明しました。This article has covered the NSUserDefaults class and how it can be used to provide a set of options that the end user can use to configure your Xamarin.iOS App. さらに、アプリグループを使用して、拡張機能とその親アプリ間、またはグループ内のアプリ間で通信を行います。Additionally, it covered using App Groups to communicate between an extension and its Parent App or between apps in a group.