为什么NSUserDefaultsDidChangeNotification收到两次?

时间:2011-08-18 21:17:08

标签: iphone ios4

我的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会一次又一次地被触发。

我无法理解为什么。谁能帮我?谢谢。

3 个答案:

答案 0 :(得分:3)

您是否确定您只更改了默认设置中的一项内容?如果您更改了多个默认值,则NSUserDefaultsDidChangeNotification将被多次发送。我在一些应用程序中使用了类似的方法,我从未遇到过这个错误。这使我倾向于认为必须更改多个默认值。

答案 1 :(得分:2)

每次应用变为活动状态时,您都会添加观察者。在第二次应用程序处于活动状态后,我认为您将让观察者注册两次并收到两个通知。注册不应该使用didFinishLaunching变体吗?

答案 2 :(得分:0)

我看到你已将问题标记为已回答,但我注意到你在defaultsChanged:方法中有两个NSLog语句。也许这个方法没有调用两次,但是你要记录两次调用。

相关问题