如何检查用户词典中的键是否发生了变化?

时间:2014-07-25 12:07:50

标签: ios in-app-purchase nsuserdefaults

我想知道是否有办法跟踪用户词典默认值中某个键状态的变化。

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

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

所以我在具有这些功能的视图上实现了willAppear方法,以便在购买时检查密钥。

问题在于,如果密钥为真(已完成购买),它将执行多项任务,但每次用户购买iAP产品时,我都不需要执行此任务。

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用KVO(Key Value Observer)。

如果要使用specic键检测更改,请使用:

[[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"]);
}

希望它对你有所帮助。

答案 1 :(得分:-1)

您可以在这方面使用Reactive Cocoa。

更多信息:https://github.com/ReactiveCocoa/ReactiveCocoa

  

ReactiveCocoa的灵感来自功能性反应式编程。 RAC不是使用就地替换和修改的可变变量,而是提供捕获当前和未来值的信号(由RACSignal表示)。

     

通过链接,组合和响应信号,可以以声明方式编写软件,而无需持续观察和更新值的代码。