ios - 如何检查用户字典中的键是否更改?

标签 ios in-app-purchase nsuserdefaults

我想知道是否有一种方法可以跟踪用户字典默认值中键状态的变化。

我不需要检查它是真还是假,我只需要知道它是否改变了。

这是我的场景: 我有一个解锁某些功能的 iAP 产品,我希望这些功能在购买后立即可用,而无需重新启动应用程序或注销。

所以我在具有这些功能的 View 上实现了 willAppear 方法,以通过 key 检查是否进行了购买。

问题在于,如果 key 为真(已购买完成),它将执行多项任务,但我不需要在每次用户购买 iAP 产品并使用该应用程序时执行此任务。

谢谢。

最佳答案

您可以为此使用 KVO(键值观察器)。

如果你想检测特定键的变化,使用:

[[NSUserDefaults standardUserDefaults] addObserver:self
                                        forKeyPath:@"YOUR_KEY_HERE"
                                           options:NSKeyValueObservingOptionNew
                                           context:NULL];

如果想在 NSuserdefauls 任何键更改时检测更改..

使用 NSUserDefaultsDidChangeNotification,您可以检测键值何时发生任何更改。

所以首先添加观察者:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil];

然后检测使用:

- (void)defaultsChanged:(NSNotification *)notification {
  // Get the user defaults
  NSUserDefaults *defaults = (NSUserDefaults *)[notification object];

  NSLog(@"%@", [defaults objectForKey:@"YOUR_KEY"]);
}

希望对你有帮助。

关于ios - 如何检查用户字典中的键是否更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955458/

相关文章:

ios - 应用内购买无法在某些设备上解锁内容

ios - iOS 中的持久图像存储

ios - 具有关联类型和泛型的 Swift 协议(protocol)调用错误的函数

iOS Safari 因提交大型帖子数据表单而崩溃

android - 为什么要在服务器上验证 Play 商店购买?

ios - 如何在不在代码末尾声明其标识符的情况下访问App中的App Purchase Products?

swift - 测验应用程序 : Saving selected quiz-questions using NSUserDefaults and displaying it in another view controller

ios - 使用 plist 中的文本命名 NSUserDefaults

ios - 修改UITableViewCell,这段代码放在哪里?对设计模式感到困惑

ios - 将 UIImageView 添加到自定义 UIButton 类