当应用程序处于后台状态时更改联系人数据库时,我能够观察到CNContactStoreDidChangeNotification
。我敢肯定,只有一个观察者被添加到NSNotificationCenter
。
问题是即使我仅添加一个新联系人,NSNotificationCenter
也会发布多次(2、3、5,甚至更多次)。
问题出在哪儿?
最佳答案
确保您没有多次添加观察者。如果(例如)在 View Controller 中从-addObserver
或-viewDidLoad
调用-viewDidAppear
(因为在应用程序的整个生命周期中可能会多次调用它们),或者从您的应用程序中的任何状态回调中调用-applicationDidBecomeActive
,都可能会发生应用程序委托(delegate)(-applicationWillResignActive
,-applicationDidEnterBackground
,-applicationWillEnterForeground
,-addObserver
等)。
将对-addObserver
的调用包装在一个条件中,以确保只能被调用一次(设置一个标志),并在其周围放置NSLog语句,以便可以在调试控制台中查看是否多次到达该位置。在您的代码中搜索您可能已忘记的其他对-removeObserver
的调用。
请确保在添加之前调用-removeObserver
(确保传递与添加时相同的名称和对象)。可以在不存在的观察者上调用CNContactStoreDidChangeNotification
可以。 请注意,这更像是一个临时解决方案而不是解决方案-您的代码应该足够聪明,知道您是否已经添加了它-但这可能有助于您诊断问题。
我只是编写了一个快速的最小测试程序,该程序在-addObserver
上添加了一个观察者(一次!),添加或更改联系人后,我仅收到一次通知。为自己编写一个类似的测试程序,看看是否得到相同的结果。如果您的测试程序正常运行,则可能是您的应用正在执行您不期望的操作(并多次调用ojit_code)。
关于ios - CNContactStoreDidChangeNotification被多次触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34560581/