代码之家  ›  专栏  ›  技术社区  ›  Raj Pawan Gumdal

nsuserdefaults版本更新的灵活性

  •  0
  • Raj Pawan Gumdal  · 技术社区  · 14 年前

    我正在使用 NSUserDefaults “API” -registerDefaults 注册我的应用程序的工厂默认值的API。对于应用程序的第一个版本,一切都可以。但当我为iPhone应用程序提供更新时,我有三个标准来确保:

    1. 旧版本应用程序的用户首选项应该是完整的。
    2. 除了新版本的工厂默认设置外,还应应用新版本。
    3. 为将来的版本更新提供设计灵活性,以便用户默认情况下根据新版本修改自己。

    API -寄存器默认值 不在新版本更新中注册工厂默认值,因为包含用户首选项的plist文件已存在于沙盒的/library/preferences中。如果我们用新的出厂默认值重置首选项,以前版本的用户首选项将丢失。

    我认为应该有一个处理这种情况的设计模式,所以一般来说,我们如何应对这种情况?苹果公司不提供任何内在的支持吗?或者我错过了一些链接,我试着到处搜索,但没有成功。

    谢谢, 拉吉

    3 回复  |  直到 14 年前
        1
  •  1
  •   Brian Webster    14 年前

    如果您所谈论的项目列表是一个在单个键下注册的数组,那么是的,传递给 -registerDefaults: 将被忽略,取而代之的是存储在持久plist中的较小数组。nsuserdefaults以每键为基础跟踪内容,不会对存储在其中的内容进行任何解释,因此它不会尝试自动将以前的数组值与新的数组值合并,也不会尝试任何类似的愚蠢行为。

    如果您希望在用户升级时在默认情况下将新项添加到此数组中,我建议您通过提取现有数组、添加新项,然后再次将较大的数组保存回用户默认值,将这些项显式添加到密钥中。您可以使用一个单独的布尔标记来指示升级已经完成,以确保添加不会多次执行。

        2
  •  0
  •   Johan Kool    14 年前

    有什么问题?如果用户从不更改(或更确切地说:设置)首选项,则将使用出厂默认设置。如果应用程序的更新更改了出厂默认值,则将使用这些默认值。如果用户设置了自己的首选项,则将继续使用。

    新的出厂默认值不会(也不应该)覆盖用户设置首选项。nsuserdefaults做的正是你想要的。

        3
  •  0
  •   regulus6633    14 年前

    我同意约翰·库尔的观点。用户默认值可以正常工作。如果在更新的应用程序版本中有一个您想要更改的首选项(无论出于什么原因),只需稍微重命名该首选项即可。例如,如果someValue是版本1中的首选项,那么在版本2中,它的名称someValue_v2和新的出厂默认值将生效。