gpt4 book ai didi

ios - CNContactStoreDidChangeNotification 被多次触发

转载 作者:IT王子 更新时间:2023-10-29 05:05:29 26 4
gpt4 key购买 nike

当应用程序处于后台状态时更改联系人数据库时,我能够观察到 CNContactStoreDidChangeNotification。我很确定只有一个观察者被添加到 NSNotificationCenter。问题是 NSNotificationCenter 发布了多次(2、3、5 甚至更多次),即使我只添加了一个新联系人。问题出在哪里?

最佳答案

确保您没有多次添加观察者。如果(例如)您从 View Controller 中的 -viewDidLoad-viewDidAppear 调用 -addObserver(因为这些在您的应用程序的整个生命周期中可能会被调用不止一次),或者来自您的应用程序委托(delegate)中的任何应用程序状态回调(-applicationDidBecomeActive-applicationWillResignActive -applicationDidEnterBackground-applicationWillEnterForeground 等)。

将对 -addObserver 的调用包装在一个条件中,以确保它只能被调用一次(设置一个标志),并在它周围放置 NSLog 语句,这样你就可以在调试控制台中看到你是否不止一次到达那里。在您的代码中搜索您可能忘记的对 -addObserver 的其他调用。

在添加它之前调用 -removeObserver,只是为了确定(确保传递与添加时相同的名称和对象)。在不存在的观察者上调用 -removeObserver 是可以的。 请注意,这更像是一种创可贴而不是修复 - 您的代码应该足够智能以知道您是否已经添加了它 - 但这可能有助于您诊断问题)。

我刚刚编写了一个快速的最小测试程序,它在 CNContactStoreDidChangeNotification 上添加了一个观察者(一次!),并且当我添加或更改联系人时我只收到一次通知。为自己编写一个类似的测试程序,看看是否得到相同的结果。如果您的测试程序正常运行,那么您的应用很可能正在执行您不期望的操作(并多次调用 -addObserver)。

关于ios - CNContactStoreDidChangeNotification 被多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34560581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com