首先请注意,我没有多次作为观察员注册,如其他各种问题所述。
当我在原生日历应用程序中更改某些内容并返回到我的应用程序时,选择器会在不同的通知中被调用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}}"
有谁知道怎么解决这个问题。这意味着重新进入应用程序时只接收此观察者的一次调用?
答案 0 :(得分:0)
我想,这就是它的工作原理,日历会向您发送所有原始更改的通知。
The Apple's documentation建议您通过致电refresh
来查看您正在访问的提醒和事件。如果它返回true
,则无需重新获取它们。因此,到达的多个通知不会导致很多问题。
另外,我建议您在viewWillAppear(_:)
订阅通知并在viewDidDisappear(_:)
取消订阅。当然可能有例外,但通常你不想在屏幕不活动时处理它们。