观察另一个ViewController中的BOOL更改

时间:2014-07-28 21:46:22

标签: ios objective-c boolean observers

vc1我设置BOOL [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"myKey"];

vc2我希望观察BOOl是否更改[[NSUserDefaults standardUserDefaults] boolForKey:@"myKey"]

在这里查看 Add Observer to BOOL variableRegistering a bool for a NSNotification

似乎都不适合我的模式

2 个答案:

答案 0 :(得分:1)

使用下面的代码,当BOOL值发生变化时,它会调用。您可以使用 KVO 来观察myKey的值。在您观察的任何课程中写这个值。在viewDidLoad

中的vc2中写入
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults addObserver:self
           forKeyPath:@"myKey"
              options:NSKeyValueObservingOptionNew
              context:NULL];

在您已在vc2

中添加观察者的班级中实施此方法
    -(void)observeValueForKeyPath:(NSString *)keyPath
                     ofObject:(id)object
                       change:(NSDictionary *)change
                      context:(void *)context
{

    //check here if it is myKey than do something
    if([keyPath isEqualToString:@"myKey"]){
        //do your work
    NSLog(@"KVO: %@ changed property %@ to value %@", object, keyPath, change);
    BOOL newValue = [[change objectForKey: NSKeyValueChangeNewKey] boolValue];
    }
    else{
        NSLog(@"Not my key");
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

    }
}

vc2 dealloc

中移除观察者
-(void)dealloc{

    [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:@"myKey"];
}

observeValueForKeyPath中检查myKey的值是否更改,而不是根据需要进行更改。

答案 1 :(得分:0)

注册NSUserDefaultsDidChangeNotification并在通知触发时检查您的用户默认值,以查看更改的值是否是您感兴趣的值。