我的AppDelegate中有这段代码
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"+applicationDidBecomeActive");
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil];
NSLog(@"-applicationDidBecomeActive");
}
- (void)defaultsChanged:(NSNotification *)notification {
NSLog(@"+defaultsChanged");
// Get the user defaults
// NSUserDefaults *defaults = (NSUserDefaults *)[notification object];
NSLog(@"-defaultsChanged");
}
applicationDidBecomeActive
仅在应用程序启动时被触发一次。
如果未更改默认值,则不会触发defaultsChanged
。
但是,如果更改默认值defaultsChanged
会一次又一次地被触发。
我无法理解为什么。谁能帮我?谢谢。
答案 0 :(得分:3)
您是否确定您只更改了默认设置中的一项内容?如果您更改了多个默认值,则NSUserDefaultsDidChangeNotification
将被多次发送。我在一些应用程序中使用了类似的方法,我从未遇到过这个错误。这使我倾向于认为必须更改多个默认值。
答案 1 :(得分:2)
每次应用变为活动状态时,您都会添加观察者。在第二次应用程序处于活动状态后,我认为您将让观察者注册两次并收到两个通知。注册不应该使用didFinishLaunching变体吗?
答案 2 :(得分:0)
我看到你已将问题标记为已回答,但我注意到你在defaultsChanged:方法中有两个NSLog语句。也许这个方法没有调用两次,但是你要记录两次调用。