键盘触发通知也是默认通知

时间:2011-08-20 11:15:00

标签: iphone ios4 notifications

我在ViewController中有这个代码:

- (void) viewWillAppear :(BOOL)animated {
     // register for keyboard notifications
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) 
           name:UIKeyboardDidShowNotification object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) 
           name:UIKeyboardWillHideNotification object:self.view.window];

     // register for defaults change notification
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:)      
           name:NSUserDefaultsDidChangeNotification object:nil];
 }

 -(void) viewWillDisappear :(BOOL)animated {
     [[NSNotificationCenter defaultCenter] removeObserver:self];
 }

问题是当键盘出现时,方法defaultsChanged也会被触发。

当键盘出现时,这是一系列调用(从日志中提取):

start defaultsChanged 
end   defaultsChanged
start textFieldDidBeginEdit
end   textFieldDidBeginEdit
start keyboardWasShown
end   keyboardWasShown

我不知道会是什么。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

也许默认值确实会因键盘显示的副作用而改变?为什么不打印前后的默认值,看看是否有任何变化?以下是使用NSLog打印NSUserDefaults的一些代码:

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSDictionary* defaultsDict = [defaults dictionaryRepresentation];
NSLog(@"defaults = %@", defaultsDict);