如何在IOS中联系更改事件获得通知?

May*_*ria 11 ios swift

我希望在iPhone的联系人有插入/更新事件时收到通知.

是否可以通过我的应用获取有关特定联系人更改事件的通知?

对于IOS Swift来说,只是一个新手......

我不期待完整的源代码.只是想知道它是否可能,也暗示.

提前致谢.

and*_*ani 26

从iOS 9开始,您可以注册您的课程以观察CNContactStoreDidChangeNotification

NSNotificationCenter.defaultCenter().addObserver(
    self,
    selector: #selector(addressBookDidChange),
    name: NSNotification.Name.CNContactStoreDidChange,
    object: nil)
Run Code Online (Sandbox Code Playgroud)

然后:

@objc func addressBookDidChange(notification: NSNotification){     
    //Handle event here...
}
Run Code Online (Sandbox Code Playgroud)

如" 联系框架参考"中所述

成功执行保存后,联系人存储会将CNContactStoreDidChangeNotification通知发布到默认通知中心.如果缓存任何Contacts框架对象,则需要通过其标识符或最初用于获取它们的谓词来重新获取这些对象,然后释放缓存的对象.请注意,缓存的对象是陈旧的,但不是无效的.

编辑:

请注意,现在不推荐使用通讯簿和通讯簿UI框架.

  • 即使“通讯录”中的任何内容都没有更改,我也会收到通知。如果我只是打开系统联系人并切换到我的应用程序,我会收到通知,而不是一个,而是两个或三个 (2认同)
  • 它会通知吗?如果我们杀死应用程序并更改地址簿中的内容,请再次打开应用程序 (2认同)

San*_*ani 7

在iOS中,它可以使用 -

注册外部变更回叫通知 -

ABAddressBookRef ntificationaddressbook = ABAddressBookCreate();
    ABAddressBookRegisterExternalChangeCallback(ntificationaddressbook, MyAddressBookExternalChangeCallback, self);
Run Code Online (Sandbox Code Playgroud)

实施回电 -

void MyAddressBookExternalChangeCallback (ABAddressBookRef ntificationaddressbook,CFDictionaryRef info,void *context)
{
    // called when there is any change in AddressBook
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此链接 -

检测从ABAddressBookRegisterExternalChangeCallback更改的内容