菜鸟教程小白 发表于 2022-12-13 08:07:07

ios - 我应该把 NSNotification 中的 removeObserver 放在哪里


                                            <p><p>我有三个 <code>viewControllers</code>,我正在尝试从 <code>viewController</code> 3 向 <code>viewController</code> 1 和 2 发送通知。我认为最好的方法是使用 <code>NSNotification</code>。到目前为止,这是我所拥有的:</p>

<p><strong>在 C 类中</strong> - 发布通知</p>

<pre><code>[ postNotficationName:@&#34;Updated &#34;object:self];
</code></pre>

<p>B类</p>

<p><strong>在 A 类和 B 类中</strong> - 首先注册通知</p>

<pre><code>// viewDidLoad
[ addObserver:self selector:@selector(handleUpdate:) name:@&#34;Updated&#34; object:nil];

-(void)handleUpdate:(NSNotification *)notification {
    NSLog(@&#34;recieved&#34;);
}
</code></pre>

<p>到目前为止,这有效。但是当我在 A 类和 B 类中注销它时:</p>

<pre><code>- (void)viewWillDisappear:(BOOL)animated {
    [ removeObserver:self];
}
</code></pre>

<p><code>handleUpdate</code> 方法没有被调用。所以明显的问题是当我 <code>removeObserver's</code> 获取 <code>notification</code> 时。</p>

<p>我的问题是,如果到目前为止我所做的一切都是正确的,为什么当我删除 <code>removeObserver</code> 时它不起作用?如果不正确,我在哪里可以<code>removeObserver's</code>?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你所做的一切都是正确的。这就是通知的工作方式。
如果您的 A、B 类总是需要处理更新,您将不会删除观察者。
因为您在 viewDidLoad 中添加了“addObserver”。这意味着你只 addObserver 一次。
正常的错误是你在“viewWillAppear”或“viewDidAppear”中添加了“addObserver”,它会在类中添加不止一次的观察者。然后,您必须在 viewDidDisappear 中删除Observer。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 我应该把 NSNotification 中的 removeObserver 放在哪里,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/30905896/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/30905896/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 我应该把 NSNotification 中的 removeObserver 放在哪里