Xamarin.iOS でのユーザーの既定値の操作

この記事では、NSUserDefault を使用して Xamarin.iOS アプリまたは拡張機能に既定の設定を保存する方法について説明します。

この NSUserDefaults クラスは、iOS アプリと拡張機能がシステム全体の Defaults System とプログラムで対話する方法を提供します。 Defaults System を使用すると、ユーザーは (アプリの設計に基づいて) ユーザーの設定を満たすようにアプリの動作またはスタイルを構成できます。 たとえば、メトリックとインペリアルの測定値でデータを表示したり、特定の UI テーマを選択したりします。

アプリ グループと共に使用する場合は、 NSUserDefaults 特定のグループ内のアプリ (または拡張機能) 間で通信する方法も提供されます。

ユーザーの既定値について

前述のように、ユーザーの既定値 (NSUserDefaults) をアプリ (または拡張機能) に追加し、エンド ユーザーが実行時にアプリの外観や操作を調整するために変更できる構成可能なオプションを提供するために使用できます。

アプリを初めて実行するときに、 NSUserDefaults アプリのユーザーの既定値データベースからキーと値を読み取り、値が必要になるたびにデータベースを開いて読み取らないようにメモリにキャッシュします。

重要

Apple は、開発者がメソッドを呼び出 Synchronize してメモリ内キャッシュをデータベースと直接同期することを推奨しなくなりました。 代わりに、メモリ内キャッシュをユーザーの既定のデータベースと同期させるために、定期的な間隔で自動的に呼び出されます。

この NSUserDefaults クラスには、文字列、整数、float、ブール値、URL など、一般的なデータ型の基本設定値を読み書きするための便利なメソッドがいくつか含まれています。 その他の種類のデータは、ユーザーの既定値データベースから読み取りまたは書き込みを使用して NSDataアーカイブできます。 詳細については、「Apple の環境設定と設定プログラミング ガイド」を参照してください。

共有 NSUserDefaults インスタンスへのアクセス

共有ユーザーの既定値インスタンスは、デバイスの現在のユーザーのユーザーの既定値へのアクセスを提供します。 Shared Defaults オブジェクトが存在しない場合は、次の情報を使用して初めてアクセスして初期化されるときに作成されます。

  • NSArgumentDomain現在のアプリから解析された既定値で構成されます。
  • アプリのバンドル識別子はメインします。
  • NSGlobalDomainすべてのアプリで共有される既定値で構成されます。
  • ユーザーの優先言語ごとに個別の doメイン。
  • NSRegistrationDomain検索が常に成功するようにアプリによって変更できる一時的な既定値のセット。

Shared User Defaults Instance にアクセスするには、次のコードを使用します。

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

アプリ グループ NSUserDefaults インスタンスへのアクセス

前述のように、アプリ グループを使用して、 NSUserDefaults 特定のグループ内のアプリ (または拡張機能) 間の通信に使用できます。 まず、iOS デベロッパー センターの [証明書]、[識別子]、[プロファイル] セクションでアプリ グループと必要なアプリ ID が適切に構成され、開発環境にインストールされていることを確認する必要があります。

次に、アプリや拡張機能プロジェクトには、上記で作成した有効なアプリ ID のいずれかが必要です Entitlements.plist 。ファイルは、アプリ グループを有効にして指定したアプリ バンドルに含める必要があります。

これで、次のコードを使用して、共有アプリ グループのユーザーの既定値にアクセスできます。

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

アクセスする証明書、識別子、プロファイル作成されたアプリ グループはどこにgroup.com.xamarin.todaysharingありますか。 詳細については、アプリ グループの機能に関するドキュメントを参照してください。

既定値の読み取り

目的のユーザーの既定のデータベースにアクセスした後は、キーと値のペアと、読み取られるデータの種類に基づいていくつかの便利な方法を使用して、既定値から値を読み取ることができます。

  • ArrayForKey - 指定されたキー値の NSObjects 配列を返します。
  • BoolForKey - 指定されたキーのブール値を返します。
  • DataForKey - 指定されたキーの NSData オブジェクトを返します。
  • DictionaryForKey - 指定されたキーの an NSDictionary を返します。
  • DoubleForKey - 指定されたキーの double 値を返します。
  • FloatForKey - 指定されたキーの float 値を返します。
  • IntForKey - 指定されたキーの整数値を返します。
  • StringArrayForKey - 指定されたキー値からオブジェクトの String 配列を返します。
  • StringForKey - 指定されたキーの文字列値を返します。
  • URLForKey - 指定されたキーの NSUrl 値を返します。

たとえば、次のコードでは、ユーザーの既定値からブール値を読み取ります。

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

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

既定値の書き込み

上記の値を読み取るのと同様に、目的のユーザーの既定のデータベースにアクセスした後は、キーと値のペアと、書き込まれるデータの種類に基づいていくつかの便利な方法を使用して既定値に値を書き込むことができます。

  • SetBool - 指定されたブール値を指定されたキーに書き込みます。
  • SetDouble - 指定された double 値を指定されたキーに書き込みます。
  • SetFloat - 指定された float 値を指定されたキーに書き込みます。
  • SetString - 指定された文字列値を指定されたキーに書き込みます。
  • SetURL - 指定された URL (NSUrl) 値を指定されたキーに書き込みます。

たとえば、次のコードでは、ブール値をユーザーの既定値に書き込みます。

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

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

重要

アプリを初めて実行するときに、 NSUserDefaults アプリのユーザーの既定値データベースからキーと値を読み取り、値が必要になるたびにデータベースを開いて読み取らないようにメモリにキャッシュします。

まとめ

この記事では、 NSUserDefaults クラスと、それを使用して、エンド ユーザーが Xamarin.iOS アプリの構成に使用できる一連のオプションを提供する方法について説明しました。 さらに、アプリ グループを使用して拡張機能とその親アプリ間、またはグループ内のアプリ間で通信する方法について説明しました。