【问题标题】:CFPreferencesCopyAppValue not working under iOS 4CFPreferencesCopyAppValue 在 iOS 4 下不起作用
【发布时间】:2010-07-02 04:14:35
【问题描述】:

我将用户名存储在 CFPreferencesCopyAppValue 中。在 iOS 3.1.3 下,它按预期工作,但在 iOS4 中,它在应用程序打开时存储它,但一旦它关闭(使用多任务关闭功能),变量就不会存储,即在重新启动应用程序时它为空。

我感觉这可能是多任务处理的问题,因为应用程序的关闭方式与 iOS 3 中的有些不同,因此不会保存正在关闭的应用程序。

很遗憾,我没有使用最新版本的 SDK,因此它可能会在以后的版本中修复,但我需要应用程序在 3.1.3 和 4.0 下工作,这是具有 3.1 的 SDK 的最后一个版本.3 和 4.0 无需多次安装。因此,如果它在最终版本中得到修复,我想我必须进行多次安装。

感谢您对此事的任何了解。

【问题讨论】:

  • 请注意,根据developer.apple.com/iphone/checklist,所有新应用程序和对现有应用程序的更新都必须使用 iPhone SDK 4 构建。除非您正在开发内部分发应用程序,否则尝试编写适用于 iOS 3.1.3 的新代码似乎没有多大意义。
  • 它适用于特定的受众(我不会详细说明谁),但很可能会有 3.1.3 设备使用它。它将使用 iPhone 4.0 SDK 构建,但我看不出为什么如果它为 4.0 构建并且编码正确,大多数它不能在 3.0 上运行,可以吗?我使用这个版本的 SDK 的原因是我可以在同一环境中定位 3.1.3 和 4。

标签: iphone iphone-sdk-3.0 ios4 cfpreferences


【解决方案1】:

如果您发布一些有关如何尝试更新值的实际代码,这可能会很有用。根据CFPreferencesCopyAppValue 文档:

请注意,此函数返回的值是不可变的,即使您最近使用可变对象设置了该值。

并且Preferences Best Practices 文档指定您应该使用CFPreferencesSetAppValue 来保存值。

更新:我怀疑我在你的场景中遗漏了一些东西,也许我在下面的回答是你在做什么,因为你确实提到你当前的代码可以运行3.1.3.

如果是这种情况,您可能需要指定在哪个事件上保存值。可能是您在关闭应用时更新它,但是如果您没有在 plist 中明确指定不支持暂停,则您的应用可能只是暂停。

Update2CFPreferencesSetAppValue 文档明确提到:

您必须调用 CFPreferencesAppSynchronize 函数才能将您的更改保存到永久存储中

【讨论】:

  • 我在代码的早期使用 CFPreferencesSetAppValue 设置值,并且在 iOS 3 和 4 中都可以稍后正确检索它们。该值设置为 CFPreferences 并在应用程序关闭之前从中检索。在 iOS3 中它工作正常,在 iOS4 中它重置为 null。当应用程序关闭或暂停或任何事情时,我什么也没做,但也许操作系统在应用程序关闭时将 CFPreferences 之类的项目存储在闪存中,这在 iOS4 中不会发生,因此它为什么会失败,不知道
  • 谢谢,这似乎奏效了。奇怪的是,虽然我没有这么称呼它,但在 iOS3 下它可以工作,而 iOS4 却没有。认为这是让我感到困惑的事情
猜你喜欢
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
相关资源
最近更新 更多