带有EKEventStoreChanged通知的NotificationCenter多次调用不同的通知

时间:2016-11-15 15:19:20

标签: ios swift nsnotificationcenter

首先请注意,我没有多次作为观察员注册,如其他各种问题所述。

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

viewDidLoad我删除任何可能的观察者并注册agian一次:

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 EKEventStoreChangedObjectIDsUserInfoKey =(\ n \" x-apple-eventkit:/// Location / p259707 \",\ n \" x-apple-eventkit:/// Event / p264955 \" \ n); \ n}}"   "方法称为NSConcreteNotification 0x174258840 {name = EKEventStoreChangedNotification; object =; userInfo = {\ n EKEventStoreChangedObjectIDsUserInfoKey =(\ n \" x-apple-eventkit:/// Location / p259707 \",\ n \" x-apple-eventkit:/// Event / p264955 \" \ n); \ n}}"   "方法称为NSConcreteNotification 0x17024b250 {name = EKEventStoreChangedNotification; object =; userInfo = {\ n EKEventStoreChangedObjectIDsUserInfoKey =(\ n \" x-apple-eventkit:/// Location / p259707 \",\ n \" x-apple-eventkit:/// Event / p264955 \" \ n); \ n}}"   "方法称为NSConcreteNotification 0x174253b00 {name = EKEventStoreChangedNotification; object =; userInfo = {\ n EKEventStoreChangedObjectIDsUserInfoKey =(\ n \" x-apple-eventkit:/// Location / p259707 \",\ n \" x-apple-eventkit:/// Event / p264955 \" \ n); \ n}}"

有谁知道怎么解决这个问题。这意味着重新进入应用程序时只接收此观察者的一次调用?

1 个答案:

答案 0 :(得分:0)

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

The Apple's documentation建议您通过致电refresh来查看您正在访问的提醒和事件。如果它返回true,则无需重新获取它们。因此,到达的多个通知不会导致很多问题。

另外,我建议您在viewWillAppear(_:)订阅通知并在viewDidDisappear(_:)取消订阅。当然可能有例外,但通常你不想在屏幕不活动时处理它们。