在 Xamarin.iOS 中使用用户默认值

本文介绍如何使用 NSUserDefaults 在 Xamarin iOS 应用或扩展中保存默认设置

NSUserDefaults 类为 iOS 应用和扩展提供了一种以编程方式与系统范围的默认系统交互的方法。 使用默认系统,用户可以配置应用的行为或样式以满足他们的偏好(基于应用的设计)。 例如,以公制与英制度量单位显示数据或选择给定的 UI 主题。

与应用组一起使用时,NSUserDefaults 还能提供一种在给定组中的应用(或扩展)之间通信的方法。

关于用户默认值

如上所述,用户默认值 (NSUserDefaults) 可以添加到应用(或扩展)中,并用于提供最终用户可以修改的可配置选项,以便在运行时调整应用的外观或操作。

当应用首次执行时,NSUserDefaults 从应用的用户默认数据库中读取键和值,并将其缓存到内存中,以避免每次需要值时都打开和读取数据库。

重要

Apple 不再建议开发人员调用 Synchronize 方法来直接将内存中缓存与数据库同步。 相反,它将定期自动调用,使内存中缓存与用户的默认数据库保持同步。

NSUserDefaults 类包含多种方便的方法,用于读取和写入常见数据类型的首选项值,例如:字符串、整数、浮点数、布尔值和 URL。 其他类型的数据可以使用 NSData 进行存档,然后从用户默认数据库读取或写入到用户默认数据库。 有关详细信息,请参阅 Apple 的首选项和设置编程指南

访问共享 NSUserDefaults 实例

共享用户默认值实例为设备的当前用户提供对用户默认值的访问。 如果共享默认值对象不存在,则会在首次访问时创建该对象,并使用以下信息进行初始化:

  • 由从当前应用分析的默认值组成的 NSArgumentDomain
  • 应用的捆绑标识符域。
  • 由所有应用共享的默认值组成的 NSGlobalDomain
  • 每种用户首选语言都有一个单独的域。
  • 具有一组临时默认值的 NSRegistrationDomain,应用可以修改这些默认值以确保搜索始终成功。

若要访问共享用户默认值实例,请使用以下代码:

// 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 - 返回给定键的 NSDictionary
  • DoubleForKey - 返回给定键的双精度值。
  • FloatForKey - 返回给定键的浮点值。
  • IntForKey - 返回给定键的整数值。
  • StringArrayForKey - 从给定键值返回 String 对象的数组。
  • StringForKey - 返回给定键的字符串值。
  • URLForKey - 返回给定键的 NSUrl 值。

例如,以下代码将从用户默认值中读取布尔值:

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

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

写入默认值

与上述读取值一样,在访问所需的用户默认数据库后,可以使用键/值对和几种基于写入数据类型的便捷方法将值写入默认值:

  • SetBool - 将给定的布尔值写入给定的键。
  • SetDouble - 将给定的双精度值写入给定的键。
  • SetFloat - 将给定的浮点值写入给定的键。
  • SetString - 将给定的字符串值写入给定的键。
  • SetURL - 将给定的 URL (NSUrl) 值写入给定的键。

例如,以下代码将布尔值写入用户默认值:

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

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

重要

当应用首次执行时,NSUserDefaults 从应用的用户默认数据库中读取键和值,并将其缓存到内存中,以避免每次需要值时都打开和读取数据库。

总结

本文介绍了 NSUserDefaults 类,以及如何使用它来为最终用户提供可用于配置 Xamarin.iOS 应用的一组选项。 此外,还介绍了如何使用应用组在扩展与其父应用之间或组中的应用之间通信。