Ios 具有EKEventStoreChanged通知的NotificationCenter使用不同的通知多次调用

Ios 具有EKEventStoreChanged通知的NotificationCenter使用不同的通知多次调用,ios,swift,nsnotificationcenter,Ios,Swift,Nsnotificationcenter,首先,请注意,我并没有像其他问题中描述的那样多次注册为观察员 当我在本机日历应用程序中更改某些内容并返回到我的应用程序时,选择器会被调用4-5次,并发出不同的通知 在viewDidLoad中,我删除所有可能的观察者并注册AGIA一次: NotificationCenter.default.removeObserver(self) NotificationCenter.default.addObserver(self, selector: #selector(reloadModelData(not

首先,请注意,我并没有像其他问题中描述的那样多次注册为观察员

当我在本机日历应用程序中更改某些内容并返回到我的应用程序时,选择器会被调用4-5次,并发出不同的通知

viewDidLoad
中,我删除所有可能的观察者并注册AGIA一次:

NotificationCenter.default.removeObserver(self)
NotificationCenter.default.addObserver(self, selector: #selector(reloadModelData(notification:)), name: Notification.Name.EKEventStoreChanged, object: nil)
相应的方法:

@objc private func reloadModelData(notification: NSNotification) {
    debugPrint("method called \(notification)")
}
导致这个输出

名为NSConcreteNotification 0x170246300的方法{name=EKEventStoreChangedNotification;object=;userInfo={\n ekEventStoreChangedObjectedUserInfoKey=(\n\“x-apple”-eventkit:///Location/p259707\“,\n\”x-apple-eventkit:///Event/p264955\“\n);\n}” 名为NSConcreteNotification 0x174258840的方法{name=EKEventStoreChangedNotification;object=;userInfo={\n ekEventStoreChangedObjectedUserInfoKey=(\n\“x-apple”-eventkit:///Location/p259707\“,\n\”x-apple-eventkit:///Event/p264955\“\n);\n}” 名为NSConcreteNotification 0x17024b250的方法{name=EKEventStoreChangedNotification;object=;userInfo={\n ekEventStoreChangedObjectedUserInfoKey=(\n\“x-apple”-eventkit:///Location/p259707\“,\n\”x-apple-eventkit:///Event/p264955\“\n);\n}” 名为nsContenteNotification 0x174253b00的方法{name=EKEventStoreChangedNotification;object=;userInfo={\n ekEventStoreChangedObjectedUserInfoKey=(\n\“x-apple”-eventkit:///Location/p259707\“,\n\”x-apple-eventkit:///Event/p264955\“\n);\n}”


有人知道如何解决这个问题吗。这意味着在重新进入应用程序时只会收到该观察者的一次呼叫?

我想,这就是它的工作原理,日历会向您发送您所做的所有原始更改的通知

建议通过调用
refresh
检查您正在访问的提醒和事件。如果返回
true
,则无需重新蚀刻它们。因此,多个通知到达不会造成太大问题


此外,我还建议在
视图中订阅通知将出现(:)
,在
视图中取消订阅将消失(:)
。当然可能会有例外情况,但通常情况下,当屏幕不处于活动状态时,您不希望处理它们。

根据文档,重新提取所有事件和提醒也可以,这就是我将要做的。即使我只删除一个事件,也会有4-5个调用。在我看来,这不应该触发这么多观察者操作。@ph1lb4那么有什么问题吗?@ph1lb4尝试在
viewdiddefine
removeObserver
,并添加
viewwillbeen
。此外,视图将出现,您必须检查是否有任何更改。感谢提示,不幸的是,我已经尝试过了。问题不是我订阅了观察家多次,因为每次的通知都不一样。问题是,当只有一个通知应该被触发时,有几个通知。@ph1lb4我没有说你订阅了多次。我说过只有当视图控制器可见时才应该订阅。请说明您遇到的问题。当你征求建议时,不清楚你的意思是什么。我据此编辑了这个问题。你找到解决方案了吗?我也有同样的问题