【问题标题】:Why doesn't adding observer for a notification with blocks work?为什么为带有块的通知添加观察者不起作用?
【发布时间】:2014-08-16 07:17:54
【问题描述】:

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

[[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);
}];

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

【问题讨论】:

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


    【解决方案1】:

    如果你尝试用 [NSOperationQueue mainQueue] 替换队列的 nil 参数会怎样

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

    【讨论】:

    • 将其更改为[NSOperationQueue mainQueue] 实际上并没有什么不同。如何保持对令牌的引用?
    【解决方案2】:

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

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

    请参阅documentation 中的示例。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 2019-10-12
      相关资源
      最近更新 更多