【问题标题】:Settings.bundle: how should application recognize the fact that a value got changed outside of app? [duplicate]Settings.bundle:应用程序应该如何识别值在应用程序之外发生更改的事实? [复制]
【发布时间】:2013-12-10 19:46:53
【问题描述】:

我正在使用设置包来配置我的应用程序。作为副作用,在 iOS 设置中的应用程序之外可以使用相同的设置集。这很棒。但是有一个小问题——我确实需要对这些变化做出反应。例如,我有一个用户用来被其他人识别的名称,如果它发生变化,则必须进行服务器调用。如何处理?

编辑:放轻松,伙计们。我以前从未这样做过,而且很难阅读所有可用的指南。 Settings.bundle 不是一件显而易见的事情。无论如何,请随意对问题投反对票,但在这样做之前至少要花一分钟时间通读所有赞扬。

尝试了几种建议的方法,即在应用程序处于活动状态时使用通知和更直接地操纵默认值。第二种方法效果更好,因为它只在我期望的时候执行,而不是每次在应用程序中更改/添加/删除任何配置设置时执行。

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSString *nameOld = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey];

    [[NSUserDefaults standardUserDefaults] synchronize];

    NSString *nameNew = [[NSUserDefaults standardUserDefaults] stringForKey:kNameKey];

【问题讨论】:

  • 检查值。与其他地方保存的默认版本进行比较。
  • 不确定谁投了反对票...我完全知道如何添加观察者。这是一个清晰的技术。我想知道如何从 iOS 设置屏幕返回。我觉得@Duncan Groenewald 给了我一个想法。
  • @MartinR 我不知道为什么这是一个重复。该问题中没有任何内容可以解决我的问题。 developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/… 这里也没有说什么。所以请详细说明。
  • @Schultz9999:您的问题是如何对应用设置的更改做出反应,这可以通过监听 NSUserDefaultsDidChangeNotification 来完成。还有一个演示该技术的示例应用程序:developer.apple.com/LIBRARY/IOS/samplecode/AppPrefs/…。 - 但是如果我误解了你的问题,我很抱歉......
  • @MartinR 现在是的,你是对的。那是最好的办法。这个问题真的是一个骗局。我会投票自己关闭。

标签: ios objective-c settings.bundle


【解决方案1】:

您应该检查此 appDelegate 方法中设置的更改。

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Check for any changes to settings
    [[NSUserDefaults standardUserDefaults] synchronize];
    NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
    bool userICloudChoice = [userDefaults boolForKey:_cloudPreferenceKey];
}

【讨论】:

  • 啊..所以在同步之前获取一个旧值,然后同步并获取一个新值?
  • @0x7fffffff 整个 NSUserDefaults 的副本?我想我可以,因为有一种方法可以将其表示为字典。
  • 我只是调用了同步,因为我发现如果用户对设置包中的应用程序设置进行更改(使用 iOS 设置应用程序),那么除非我调用同步,否则应用程序并不总是会立即看到这些更改。因此,我假设(可能是错误的)您希望能够检测到用户何时使用您应用中的 iOS 设置应用更改应用设置,然后做出相应的响应。
  • 没错。当应用程序回到前台时,用户名或订购需要一些反应。我会玩同步,看看我是否可以避免按照 0x7fffffff 的建议创建副本。
  • 我不会依赖同步,我将设置保存在应用程序的内存中,并与每次应用程序返回前台时检索到的设置进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多