NSNotification被多次调用

时间:2017-12-14 22:05:13

标签: 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)")
        }
    }

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

1 个答案:

答案 0 :(得分:0)

我认为根据委托设置通知发布并不是一个好主意,因此应该做的是从委托检查条件发布通知是否添加了通知中的更改。