ios - NSNotification 被多次调用

标签 ios swift notifications contacts

我的 didFinishLaunchingWithOptions 中有以下代码

  NotificationCenter.default.addObserver(
            self,
            selector: #selector(addressBookDidChange),
            name: NSNotification.Name.CNContactStoreDidChange,
            object: nil)

这是它调用的方法

@objc func addressBookDidChange(notification: NSNotification){
                self.processContacts()

    }

这是正在删除的通知

func applicationWillTerminate(_ application: UIApplication) {
NotificationCenter.default.removeObserver(NSNotification.Name.CNContactStoreDidChange)
    }

问题是,当我通过下面的方法添加新联系人时,addressBookDidChange 会被多次调用,而不是一次

func addContact(contact:ContactObject) {
        let store = CNContactStore()

        let contactToAdd = CNMutableContact()
        contactToAdd.givenName = contact.firstName
        contactToAdd.familyName = contact.lastName
        contactToAdd.organizationName = contact.company

        for case let contactNumber as PhoneNumberObject in contact.phoneNumbers!{
            let mobileNumber = CNPhoneNumber(stringValue: contactNumber.number)
            contactToAdd.phoneNumbers.append(CNLabeledValue(label: contactNumber.type.getCNLabelValue(), value: mobileNumber))
        }


        if let image = contact.image {
            contactToAdd.imageData = UIImagePNGRepresentation(image)
        }

        let saveRequest = CNSaveRequest()
        saveRequest.add(contactToAdd, toContainerWithIdentifier: nil)

        do {
            try store.execute(saveRequest)
        } catch {
            NSLog("Error adding contact \(contact.firstName) \(contact.lastName) : \(error)")
        }
    }

如何让添加一个联系人时只调用一次通知?

最佳答案

我认为基于委托(delegate)设置通知发布并不是一个好主意,因此应该做的是从委托(delegate)检查条件是否添加通知更改为联系人来发布通知。

关于ios - NSNotification 被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47822789/

相关文章:

ios - 为什么我不能给无主常量一个初始值?

ios - Swift 泛型数组

来 self 的应用程序的 Facebook 通知出现和消失

android - Android O 中未设置 Firebase Cloud Messaging 后台通知 channel ID

ios - 在 Swift/IOS 中获取实际 View 大小

ios - Swift Json - 从 API 获取数据

ios - 如何快速复制 float 缓冲区?

ios - 使用新的苹果开发面板生成推送通知 ssl 证书和配置?

ios - Swift - 具有动态宽度的自动布局 3 View

android - 透明 Activity 正在主要 Activity 之上开放。如何在不超过主要 Activity 的情况下打开它?