如何检测NSUserDefault中的更改?

Pav*_*nen 1 xcode switch-statement nsuserdefaults ios

我有开关,我想检测是否有任何开关被改变位置,如果有变化我需要开始我的行动.

开关存储位置 NSUserDefaults

- (IBAction)saveSwitch:(id)sender
{     
    NSUserDefaults *defs1 = [NSUserDefaults standardUserDefaults];
    [defs1 setBool: blackSwitch.on forKey: @"blackKey"];

    NSUserDefaults *defs2 = [NSUserDefaults standardUserDefaults];
    [defs2 setBool: greenSwitch.on forKey: @"greenKey"];

    [[NSUserDefaults standardUserDefaults] synchronize];
}
Run Code Online (Sandbox Code Playgroud)

tum*_*tum 5

您可以在打电话时发布通知 synchronize

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyAppSettingsChanged" object:self userInfo:nil];
Run Code Online (Sandbox Code Playgroud)

然后在你的其他课堂听取通知.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAppSettingsChanged:) name:@"MyAppSettingsChanged" object:nil];

-(void) onAppSettingsChanged:(NSNotification)notification
{
   // settings changed
}
Run Code Online (Sandbox Code Playgroud)

如果需要,可以NSDictionary在调用时传入userInfo postNotificationName,其中包含哪些设置已更改的信息.