当应用程序处于后台状态时更改联系人数据库时,我能够观察到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/

10-12 03:38