为什么没有为块通知添加观察者?

时间:2014-08-16 07:17:54

标签: ios objective-c objective-c-blocks nsnotificationcenter

我有这种方法可以在键盘出现时移动我的文本字段:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

- (void)keyboardWillShow:(NSNotification *)notification {

    self.scrollView.contentOffset = CGPointMake(0.0f, keyboardShift);
}

然后我尝试使用块方法:

[[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillShowNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
    self.scrollView.contentOffset = CGPointMake(0.0f, keyboardShift);
}];

但是,使用这种方法我在块中设置了一个断点,但它没有被调用。我有什么遗失的吗?为什么这种方法不起作用,而另一种方法呢?

2 个答案:

答案 0 :(得分:0)

如果尝试用[NSOperationQueue mainQueue]

替换队列的nil参数怎么办?

此外,如果您使用块API,请确保保留对返回的令牌的引用,以便您可以在以后的适当时间删除观察者。

答案 1 :(得分:0)

addObserverForName返回一个你应该坚持的对象。从标题:

  

返回值由系统保留,并且应由调用者保留,以便使用removeObserver删除观察者:稍后,停止观察。

请参阅documentation中的示例。